我已经运行了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']);
});
答案 0 :(得分:0)
您开始加载您的应用程序:
<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
以从输出目录中删除单个文件,并仅保留优化的捆绑包。