8

如果我有一个名为的非 AMD 模块old.js,并且在此脚本中,我有两个函数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错误。该文档没有提到多个(http://requirejs.org/docs/api.html#config-shim)我认为这是因为即使那些jquery示例也是单独的文件并且它们具有“入口”功能/类。

4

1 回答 1

12

一般来说,如果你想从一个模块中导出多个对象,你……仍然需要导出一个对象。标准形式是将您的函数附加到导出对象并返回:

function f1() { ... }
function f2() { ... }

return {
    f1: f1,
    f2: f2
};

如果这是非 AMD 代码,您可能没有该return语句,但您仍需要添加导出对象。

看起来旧代码的推荐选项是仅f1exports属性中指定,然后在init函数中进行进一步修改。大概 require 实际上是使用该exports属性来检查文件是否已加载,因此是否包含所有项目都没有关系。假设f1f2都是全局变量,您可能可以这样做:

shim: {
    "old": {
        deps: ["jquery"],
        exports: "f1",
        init: function() {
            return {
                f1: f1,
                f2: f2
            };
        }
    }
}

这应该允许您要求old并获取导出对象,而不是f1

require(['old'], function(old) {
    old.f1();
    old.f2();
});
于 2013-09-06T04:52:47.197 回答