Я использую requireJS для загрузки скриптов. Он имеет эту деталь в документах:
Путь, используемый для имени модуля, не должен содержать .js расширение, поскольку сопоставление пути может быть для каталога.
В моем приложении я сопоставляю все мои файлы script в пути конфигурации, потому что они динамически генерируются во время выполнения (мои сценарии начинают жизнь как вещи типа order.js
, но становятся такими, как order.min.b25a571965d02d9c54871b7636ca1c5e.js
(это хэш содержимого файла, для целей кэширования).
В некоторых случаях require добавит второе расширение .js в конец этих путей. Хотя я генерирую динамические пути на стороне сервера, а затем заполняю путь к конфигу, я должен затем написать дополнительный код javascript, чтобы удалить расширение .js
из проблемных файлов.
Чтение документов requireJS, я действительно не понимаю, почему вы когда-либо хотели, чтобы сопоставление маршрутов использовалось для каталога. Означает ли это, что можно каким-то образом загружать целую директорию по достоинству файлов в один звонок? Я не понимаю.
Кто-нибудь знает, возможно ли просто заставить потребовать прекратить добавлять .js в пути к файлам, поэтому мне не нужно их взломать?
спасибо.
UPDATE: добавлены некоторые образцы кода в соответствии с запросом.
Это внутри моего HTML файла (это проект Scala, поэтому мы не можем напрямую записывать эти переменные в файл .js
):
foo.js.modules = {
order : '@Static("javascripts/order.min.js")',
reqwest : 'http://5.foo.appspot.com/js/libs/reqwest',
bean : 'http://4.foo.appspot.com/js/libs/bean.min',
detect : 'order!http://4.foo.appspot.com/js/detect/detect.js',
images : 'order!http://4.foo.appspot.com/js/detect/images.js',
basicTemplate : '@Static("javascripts/libs/basicTemplate.min.js")',
trailExpander : '@Static("javascripts/libs/trailExpander.min.js")',
fetchDiscussion : '@Static("javascripts/libs/fetchDiscussion.min.js")'
mostPopular : '@Static("javascripts/libs/mostPopular.min.js")'
};
Затем внутри my main.js
:
requirejs.config({
paths: foo.js.modules
});
require([foo.js.modules.detect, foo.js.modules.images, "bean"],
function(detect, images, bean) {
// do stuff
});
В приведенном выше примере мне нужно использовать строку "bean" (которая ссылается на путь require), а не на мой прямой объект (например, другие используют foo.js.modules.bar
), иначе я получаю добавленный дополнительный .js
.
Надеюсь, что это имеет смысл.