8

AMD 以外のモジュールに名前old.jsを付け、このスクリプト内に 2 つの関数f1f2定義するとします。それらを使用する必要があります。両方をエクスポートするにはどうすればよいですか?

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ステートメントがない可能性がありますが、エクスポート オブジェクトを追加する必要があります。

古いコードの推奨オプション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();
});
于 2013-09-06T04:52:47.197 に答える