我正在使用requirejs进行项目,我有2个模块:
define()
函数编写的AMD模块。它需要a.js
才能工作。a.js
和b.js
的实际应用程序代码。app.js看起来像这样:
//source code for app.js
require(['a.js', 'b.js'],
function( a, b ) {
a.x = 2;//this will fail because 'a' is not defined
});
现在问题是:require()
中app.js
两个模块的最简单方法是什么?我不能这样做:
//source code for app.js
require(['b.js', 'a.js'],
function( b ) {
a.x = 2;//it works because module 'a' defines a global variable named 'a'
b.x = 2;//this will fail because module 'b' is loaded before 'a' so it doesn't work
});
答案 0 :(得分:2)
正如您所说,a.js
导出名为a
的全局变量,您可以配置RequireJS
以使用shim config option以AMD方式公开它。任何需要a.js
的模块都不会知道它不是一个合适的模块。在你的情况下,配置将是这样的:
requirejs.config({
shim: {
'a.js': {
exports: 'a' // a.js defines 'window.a'
}
}
});
答案 1 :(得分:0)
这是AMD装载机的标准票价。大多数时候,不需要垫片。您的app.js来源是正确的,但您没有显示b.js的来源。由于你可以控制b.js,它应该写成一个依赖于a.js的AMD模块
// source code for b.js
// You have to use define, not require, and the dependency on a.js must be here rather than via a nested or internal require
define(['a.js'], function(a){
// your code for b.js
});
当app.js准备好执行时,这将确保在b.js之前加载a.js.