Может ли оптимизатор requirejs работать с относительными путями?
Вот пример приложения, демонстрирующего проблему (извините, нет скрипки, поскольку речь идет о r.js, который основан на узлах)
Я не могу заставить оптимизатор requirejs правильно работать с относительными путями.
мое веб-приложение имеет следующие каталоги
- приложение
- index.html - включает requirejs, main.js, затем
require(['plugins'])
(стандартная многостраничная настройка) - скрипты
- main.js - начальная загрузка requirejs, устанавливает baseUrl в / scripts
- plugins.js - ссылается и выставляет модули из app-plugins. Ссылки через
../app-plugins/a.js
- приложение-плагинов
- a.js
- index.html - включает requirejs, main.js, затем
в неоптимизированной версии все работает нормально (запустите веб-сервер в приложении, откройте консоль и перейдите на страницу индекса).
Оптимизация, однако, дает мне ошибку из-за ../
в plugins.js. Чтобы увидеть этот компакт-диск в каталог оптимизации и запустить node .\node_modules\requirejs\bin\r.js -o .\build.json
, Ошибка будет
W:\temp\requireop\optimization [master]> .\Build-RequireJs.ps1
Tracing dependencies for: main
Tracing dependencies for: plugins
Error: ENOENT, no such file or directory 'W:\temp\requireop\build\app-plugins\a.js'
In module tree:
plugins
Error: Error: ENOENT, no such file or directory 'W:\temp\requireop\build\app-plugins\a.js'
In module tree:
plugins
at Object.fs.openSync (fs.js:427:18)
1 ответ
Я сделал следующие изменения, и это сработало:
main.js
:baseUrl: 'scripts'
В общем случае пути чувствительны к регистру; Также лучше не включать ведущий слеш.
optimization/build.json
будет выглядеть так:{ appDir: '../app', baseUrl: 'scripts', dir: '../build', modules: [ // the same ] }
Вы можете найти детали здесь, но некоторые объяснения:
appDir
позволяет r.js знать, где находятся источники. Я верю, что это также дает r.js знать, как обращаться с относительными путями - хотя и не совсем уверен.- затем
baseUrl
становится относительноappDir
, - И
dir
где вывод идет, он также будет копировать файлы, найденные в вашемappDir
там.
Этот процесс перезаписывает файлы в /build/
,