我的应用程序加载器中 的r.js 版本存在问题。
Unbuild 模式运行完美,但在使用 r.js 构建后,app_loader.js#L7 bb 和 hb 中的变量为undefined
. 到目前为止,我通过使用全局变量 Handlebars 和 Backbone 来解决这个问题,但是这个shim有什么问题?
我的应用程序加载器中 的r.js 版本存在问题。
Unbuild 模式运行完美,但在使用 r.js 构建后,app_loader.js#L7 bb 和 hb 中的变量为undefined
. 到目前为止,我通过使用全局变量 Handlebars 和 Backbone 来解决这个问题,但是这个shim有什么问题?
我已删除您的全局引用并在本地进行了测试。有用。
build.js - 更新为使用 app_main 作为配置文件
({
optimizeCss: "standard",
removeCombined: true,
preserveLicenseComments: false,
appDir: "../www-root-dev",
dir: "../www-root",
keepBuildDir: false,
optimize: "uglify2",
mainConfigFile: "../www-root-dev/assets/js/app_main.js",
modules: [{
name: "app_main"
}]
})
应用程序.js
define(["app_loader"], function(loader){
var $ = loader.$, Backbone = loader.Backbone;
...
});
app_loader.js
define(["jquery","underscore","backbone","handlebars","app_routes"],
function($, _, Backbone, Handlebars, router){
return {
$: $.noConflict(),
_: _,
Backbone: Backbone,
router: router,
Handlebars: Handlebars
};
});
app_main.js - 更新以简化路径
require.config({
baseUrl: './assets/js',
paths: {
mvc: '../../mvc'
},
shim: {
underscore: {
exports: '_' //the exported symbol
},
backbone : {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
handlebars: {
deps: ['jquery'],
exports: 'Handlebars'
}
}
});
require(['app'], function(App){
App.initialize();
});
app_routes.js
define(["jquery", "underscore", "backbone", "mvc/demo.view.js", "mvc/demo.model.js"], function($, _, Backbone, DemoView, DemoModel) { ... });
demo.model.js
define(["backbone"], function(Backbone) { ... });
演示.view.js
define(["jquery","backbone","text!mvc/demo.html"], function($, Backbone,demoTemplate) { ... });
我接受了您的项目并注意到您的构建中的错误。然后,我对您的 app_main.js 文件进行了一些更改,如下所示。让我知道这是否解决了您的问题?解决了我的。
// Require.js allows us to configure shortcut alias
// Their usage will become more apparent futher along in the tutorial.
require.config({
shim: {
underscore: {
exports: '_' //the exported symbol
},
backbone : {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
handlebars: {
exports: 'Handlebars'
}
},
paths: {
appLoader: 'app_loader',
jquery: 'jquery',
underscore: 'underscore',
backbone : 'backbone' ,
handlebars: 'handlebars'
}
});
require([
'app'
], function(App){
App.initialize();
});
我认为错误是因为在您的 shim 中,您已分别将骨干和车把导出为 Backbone 和 Handlebars,
backbone : {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
handlebars:{
deps: ['jquery'],
exports: 'Handlebars'
},
在您的 app_loader.js#L7 中,您将其用作 bb 和 hb。
在 shim 中将其导出为 bb 和 hb:
backbone : {
deps: ['underscore', 'jquery'],
exports: 'bb'
},
handlebars:{
deps: ['jquery'],
exports: 'hb'
},
或者在 app_loader.js#L7 中使用 Backbone 和 Handlebars 而不是 bb 和 hb:
define("app_loader",[
"jquery",
"underscore",
"backbone",
"handlebars",
"order!assets/js/app_routes.js"
], function(jQuery, underscore, Backbone, Handlebars, router){
我也是主干和 requirejs 的新手,但它应该有所帮助。
我已经分叉了你的 github 项目并使用 grunt requirejs 来运行优化。
我设法运行该网站,并没有注意到 Chrome 中的任何控制台错误。