我使用require.js构建了一个Web应用程序,并成功使用r.js将所有模块定义合并到一个文件中。
一旦创建了r.js优化文件,我希望能够独立地要求优化文件,但是在加载和定义模块后它无法执行任何代码:
require([
'app1/optimizedAppFile'
], function (optimizedApp) {
//optimizedApp is undefined, even though it loaded
//the file and executed the module definitions in debugger
});
通过在require.config.js中定义优化文件的顶级模块的路径来加载/实例化app是否合适,然后在main.js中要求它?即。
requirejs.config({
paths: {
'optimizedApp.topLevelModule' : 'app1/optimizedAppFile'
//optimizedApp.topLevelModule is the full module name
//app1/optimizedAppFile is the combined file from r.js
}
});
答案 0 :(得分:0)
是的,在通过rjs优化代码后,您可以只需要该文件。
但是,我今天也遇到了这个问题。经过几个小时的调试后,我发现当前的1.1.2骨干版本有一段代码检测AMD(功能"定义"存在)。
删除后,骨干看起来像这样
// Backbone.js 1.1.2
// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Backbone may be freely distributed under the MIT license.
// For all details and documentation:
// http://backbonejs.org
(function(root, factory) {
root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));
}(this, function(root, Backbone, _, $) {
基本上我所做的就是让它全局可访问并为它添加垫片
require.config({
baseUrl: "/static/src/scripts/js",
paths: {
jquery: 'vendors/jquery/jquery',
underscore: 'vendors/underscore/underscore',
backbone: 'vendors/backbone/backbone',
marionette: 'vendors/backbone/backbone.marionette'
},
shim: {
jquery: {
exports: "jQuery"
},
underscore: {
exports: "_"
},
backbone: {
deps: ['underscore', 'jquery'],
exports: 'Backbone'
},
marionette: {
deps: ['backbone'],
exports: 'Marionette'
}
}
});
检查元素并检查您的控制台,看看它抱怨什么,然后转向优化 通过将rjs的optimize选项设置为false并查找它出错的部分。