我使用RequireJS,我为r.js提供了以下构建配置文件。我的主文件是app.js,它导入了jquery,ember,handlebars和下划线。我有另一个特定于我的应用程序页面的文件,名为change_email.js。它也导入了ember。
({
modules: [{
name: 'js/app',
// jQuery is included in the page
exclude: ['jquery'],
include: ['ember', 'handlebars', 'underscore']
}, {
name: 'js/change_email',
exclude: ['jquery', 'js/app']
}],
mainConfigFile: 'requirejs_config.js'
})
我的 RequireJS 配置如下:
requirejs.config({
paths: {
'jquery': 'js/lib/jquery',
'ember': 'js/lib/ember-1.0.0-rc.6.1',
'handlebars': 'js/lib/handlebars-1.0.0-rc.4',
'underscore': 'js/lib/underscore'
},
shim: {
'underscore': {
exports: '_'
},
'ember': {
deps: ['jquery', 'handlebars'],
exports: 'Ember'
},
'handlebars': {
exports: 'Handlebars'
}
}
});
我注意到有时当我加载页面时,Ember从app.js运行,有时它从ember-1.0.0-rc.6.1.js
运行。我认为这是竞争条件。如果Ember从ember-1.0.0-rc.6.1.js
开始运行,则已下载包含Ember的2个文件app.js
和ember-1.0.0-rc.6.1.js
。这似乎是违反直觉的,因为使用RequireJS的目标之一是减少下载的代码量。
我考虑过制作app.js导入然后导出ember并让其他模块从app.js导入Ember。我不喜欢这个想法,因为它要求我将我的进口改为不自然的风格。
删除重复的最有效方法是什么?
答案 0 :(得分:0)
错误并未定义生产代码应从何处加载模块。通过在我的生产配置中定义以下内容,我得到了一切正常。
requirejs.config({
baseUrl: '/static',
paths: {
'jquery': 'js/app',
'ember': 'js/app',
'handlebars': 'js/app',
'underscore': 'js/app',
'underscore.string': 'js/app'
}
});