Почему мой RequireJS игнорирует код в моем оптимизированном main.js?
В последнее время я немного работал с RequireJS, но я новичок в оптимизаторе и пытаюсь добавить его в свои этапы сборки, но столкнулся с проблемой. После того, как он запускает и объединяет мои JS-файлы в один, тело моего "main" больше не выполняется (до оптимизации работало нормально). Вся зависимость JS загружается правильно, но фактический код внутри моего main define() не загружается (хотя я вижу это в конечном выходном файле. Вот что я имею в виду:
Предполагая упрощенную версию моего main.js:
console.log("This statement outputs to console");
define(["jquery", "modernizr", "jquery.joyride"], function($) {
console.log("This statement does not");
}
Как я уже упоминал, в выходном файле я вижу встроенные операторы jquery, modernizer, joyride и console.log(), поэтому я считаю, что он генерируется правильно. Я предполагаю, что это связано с моим требованием конфигурации:
Это упрощенная версия моего app.js:
requirejs.config({
"baseUrl": "/assets/js",
"paths": {
"jquery": "jquery"
},
"shim": {
"jquery.joyride": ["jquery"]
}
});
requirejs(["app/main"]);
Я предполагаю, что второй вызов requirejs() не выполняется. Это возможно? Что могло бы вызвать это и как это исправить?
По сути, моя оптимизированная версия main.js выглядит примерно так:
(function(e,t){ ..jquery code.. };
define("jquery.joyride", function(){});
(function(a){ ...code here... });
console.log("This statement outputs to console");
define('main',["jquery", "modernizr", "jquery.joyride"], function($) {
console.log("This statement does not");
};
Вот конфиг сборки:
({
appDir: '../../',
baseUrl: "assets/js",
mainConfigFile: '../../assets/js/app.js',
dir: '../../../BUILD/',
optimizeCss: 'default',
modules: [
{
name: "main"
}
],
removeCombined: true,
preserveLicenseComments: false,
optimize: 'none' // I Disabled this to help me try and debug
})
Также это помогает, это строка, которую я использую, чтобы включить мой JS (та же самая строка boht до и после того, как я оптимизирую файл):
<script data-main="/assets/js/app" src="/assets/js/require.js"></script>
1 ответ
Поэтому, присмотревшись к коду, который вы поделились выше... проблема в том, что оптимизированная версия main.js не добавляет правильное имя модуля (define("main"[
должно быть define("app/main"[
, Я подозреваю, что это связано с одной из двух вещей:
- неверное имя модуля в конфигурационном файле r.js
- неправильная ссылка на модуль в вашем app.js
во-первых, чтобы проверить / подтвердить мое предположение: вручную отредактируйте оптимизированную версию main.js в соответствии с тем, что я упомянул выше ("app/main" вместо просто "main"). если это работает, то попробуйте эти вещи (по одному, а не одновременно):
- для адресации #1, в вашем конфигурационном файле r.js... изменить
name:"main"
вname:"app/main"
- для #2, в вашем app.js, измените
requirejs(["app/main"]);
вrequirejs(["main"]);