Require.js продолжает загружать несжатые модули после оптимизации
Я запустил оптимизатор r.js, и он, кажется, работает правильно. Единственная проблема, с которой я столкнулся, заключается в том, что во время загрузки сжатой оптимизированной версии она продолжает загружать все несжатые модули. Любая причина, почему это произойдет?
build.js
{
appDir: '../static',
mainConfigFile: '../static/javascript/config.js',
dir: '../public',
baseUrl: 'javascript/libs',
useStrict: false,
wrap: false,
optimizeCss: "standard",
optimize: "uglify2",
generateSourceMaps: false,
preserveLicenseComments: false,
uglify2: {
"screw-ie8": true,
warnings: false,
mangle: true
},
throwWhen: {
optimize: true
},
pragmasOnSave: {},
modules: [
{
name: '../front',
include: ['views/front/main'],
exclude: ['../config']
}
,
{
name: '../portal',
include: ['views/portal/main'],
exclude: ['../config']
}
,
{
name: '../survey',
include: ['views/survey/main'],
exclude: ['../config']
}
]
}
config.js
require.config({
baseUrl: '/javascript/libs',
urlArgs: 'v=' + (new Date()).getTime(),
enforceDefine: false,
paths: {
collections: '../collections',
etc: '../etc',
models: '../models',
views: '../views',
templates: '../../templates',
backbone: 'backbone',
underscore: 'lodash',
'underscore.string': 'underscore.string',
},
shim: {
backbone: {
deps: ['jquery', 'underscore'],
exports: 'Backbone'
},
underscore: {
deps: ['jquery', 'underscore.string'],
exports: '_'
},
}
});
Конфиг загружается так:
<script data-main="/javascript/portal-v2.0.0.js" src="/javascript/libs/require.js"></script>
и portal.js выглядит так:
require(['./config'], function() {
return require(['views/portal/main']);
});
1 ответ
Вы начинаете загружать ваше приложение с этим:
<script data-main="/javascript/portal-v2.0.0.js" src="/javascript/libs/require.js"></script>
Что это делает, это график загрузки вашего portal-v2.0.0.js
файл. Однако его фактическая загрузка происходит в какой-то неопределенной точке в будущем. (Кстати, вы не должны ставить .js
в конце имени модуля. Значение data-main
это имя модуля, поэтому нет .js
там. Это может вызвать тонкие проблемы.)
Как видно из загружаемых вами шаблонов загрузки, к моменту выполнения следующего кода вышеуказанный модуль еще не загружен:
require(['./config'], function() {
return require(['views/portal/main']);
});
Когда RequireJS доберется до require(['views/portal/main'])
, он находит и загружает отдельный модуль вместо пакета.
Решением здесь было бы добавить следующее к вашей конфигурации времени выполнения:
bundles: {
'/javascript/portal-v2.0.0': ['views/portal/main'],
}
Это говорит RequireJS, что когда вам требуется модуль с именем views/portal/main
, он должен искать его там же, где находится модуль с именем /javascript/portal-v2.0.0
расположен. (И не забудьте удалить .js
расширение от вашего data-main
.) Вам не нужно перечислять все модули, которые находятся в portal-v2.0.0
там только те, которые вам требуются извне portal-v2.0.0
, Обратите внимание, что то же самое будет справедливо для других ваших пакетов, если какой-либо из их модулей требуется вне их, вы должны перечислить эти модули в соответствующих bundles
Настройки.
Вы также должны посмотреть на removeCombined
удалить отдельные файлы из выходного каталога и сохранить только ваши оптимизированные пакеты.