Я использую библиотеку, которая (очень эгоистично, ИМХО) предполагает, что baseUrl будет указывать на CDN компании:
baseUrl: "[http protocol slash slash]cdn.wijmo.com/amd-js/"
Сначала я подумал, что просто скопирую содержимое вышеуказанного URL-адреса в свою собственную папку (например, /scripts/wijmo/amd-js), но это не сработает, потому что хорошие ребята из Wijmo жестко запрограммировали ссылки на пути в своих AMD. определить операторы, такие как это:
define(["./wijmo.widget"], function () { ... });
Вышеизложенное означает (если я правильно понимаю), что если у вас есть какие-либо другие модули AMD, отличные от Wijmo, вы должны:
(а) поместите их по пути amd-js, возможно, в подпапку с именем «myScripts» (б) используйте жестко закодированные ссылки пути RequireJS на ваши собственные AMD, например:
paths: {
"myAMD_1": "http://www.example.com/scripts/myScripts/myAMD_1",
"myAMD_2": "/scripts/myScripts/myAMD_2.js"
}
(a) работает, но это означает, что baseUrl не может указывать на CDN Wijmo, потому что у меня нет доступа к сайту CDN Wijmo, поэтому я должен переместить файлы, опубликованные под amd-js, на свой собственный сервер.
(b) вид работы, и вот моя проблема: если я использую синтаксис myAMD_1, то все хорошо. Но это не позволяет мне тестировать на моей локальной машине разработки, которая использует localhost. (Я не хочу определять, на каком сервере я работаю, и настраивать значение пути... Я хочу, чтобы путь оставался неизменным до и после публикации на моем http-сервере.)
Теперь, согласно документации RequireJS:
Могут быть случаи, когда вы хотите напрямую сослаться на сценарий и не соответствовать правилам «baseUrl + пути» для его поиска. Если идентификатор модуля имеет одну из следующих характеристик, идентификатор не будет передаваться через конфигурацию «baseUrl + пути», а будет рассматриваться как обычный URL-адрес, относящийся к документу: * Заканчивается на «.js». * Начинается с «/». * Содержит протокол URL, например "http:" или "https:".
Когда я пытаюсь завершить (завершить) свою ссылку на путь с помощью .js (как показано в AMD_2 выше), RequireJS не находит мой AMD и потому, что в конечном итоге ищет myAMD_2.js.js (обратите внимание на два суффикса .js). Таким образом, похоже, что RequireJS больше не соблюдает то, что, как говорится в документации, он использует в качестве алгоритма разрешения пути. Поскольку суффикс .js не работает должным образом, я не могу легко исправить ссылки на свои собственные AMD, потому что я точно не знаю, какое имя сервера или структуру физического пути они будут публиковать — я действительно хочу использовать относительные пути. .
Наконец, я не хочу менять модули AMD Wijmo не только потому, что их десятки, но и потому, что мне нужно будет повторно применять свои настройки каждый раз, когда они выпускают обновление Wijmo.
Итак, если мой baseUrl должен указывать на жестко запрограммированный путь Wijmo, то как я могу использовать свои собственные AMD, не помещая их в подпапку пути Wijmo и не делая никаких предположений о фиксированном пути или URL о том, где опубликованы мои собственные AMD?