2013-09-06 19 views
8

old.jsという名前の非AMDモジュールがあり、このスクリプト内に2つの機能があります。f1f2が定義されています。私はそれらを使用する必要があります、私はどのように両方をエクスポートするのですか?requirejsのモジュールから複数の非AMD関数をエクスポートできますか?

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の例も個々のファイルであり、 "entry"関数/クラスを持っているからです。

答えて

12

一般に、複数のオブジェクトをモジュールからエクスポートする場合は、1つのオブジェクトをエクスポートする必要があります。標準形式は、エクスポート対象に、あなたの関数を添付し、それを返すことです:

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

return { 
    f1: f1, 
    f2: f2 
}; 

これは非AMDのコードである場合、あなたはreturn文を持っていないかもしれませんが、あなたはまだエクスポートオブジェクトを追加する必要があるだろう。それは、古いコードのためのrecommended optionのように見えます

しかexportsプロパティでf1を指定することですが、その後さらにinit機能でいじるん。おそらく実際には、ファイルがロードされたことを確認するために実際にexportsプロパティを使用していることが必要なので、すべての項目を含めるかどうかは関係ありません。

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

これは、あなたがoldを必要とし、むしろf1よりも、エクスポートオブジェクトを取得することを可能にするべきである:f1f2は両方のグローバルあると仮定すると、あなたはおそらくこれを行うことができ

require(['old'], function(old) { 
    old.f1(); 
    old.f2(); 
}); 
+0

をうーんええ、そうではありませんAMDのように、彼らはちょうど通常のjavascriptの機能です。 old.jsファイルに余分なコードを追加しなければならないと言っていますか? – CppLearner

+0

私の編集を参照してください。私はこれをテストしていませんが、これはドキュメントごとに推奨されるアプローチだと思います。 – nrabinowitz

+0

そのアプローチはうまくいきます。どうもありがとう。私は眠すぎるのですか、あるいは文書の '' init''の文書コメントが混乱していますか?私はこの問題にどのように対処するかについての具体的な言及は見ていない。シム全体を3回読む。 – CppLearner

関連する問題