如果我有一个名为old.js
的非AMD模块,并且在此脚本中我定义了两个函数f1
和f2
。我需要使用它们,如何导出它们?
require.config({
paths: {
"jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min",
},
shim: {
"old": {
deps: ["jquery"],
exports: ["f1", "f2"]
}
},
urlArgs: "bust=" + (new Date()).getTime()
});
这不起作用。我会收到split
错误。 doc没有提到多个(http://requirejs.org/docs/api.html#config-shim)我认为这是因为即使那些jquery示例都是单独的文件,它们也有“入口”函数/类。
答案 0 :(得分:12)
通常,如果要从模块中导出多个对象,则...仍需要导出单个对象。标准表单是将您的函数附加到导出对象并返回:
function f1() { ... }
function f2() { ... }
return {
f1: f1,
f2: f2
};
如果这是非AMD代码,您可能没有return
语句,但仍需要添加导出对象。
旧代码的recommended option看起来只是在f1
属性中指定exports
,但在init
函数中进一步修改。据推测,require实际上是使用exports
属性来检查文件是否已加载,因此是否包含所有项目无关紧要。假设f1
和f2
都是全局变量,你可能会这样做:
shim: {
"old": {
deps: ["jquery"],
exports: "f1",
init: function() {
return {
f1: f1,
f2: f2
};
}
}
}
这应该允许您需要old
并获取导出对象,而不是f1
:
require(['old'], function(old) {
old.f1();
old.f2();
});