2

簡単なテストプロジェクトで自分自身に答えることができることを認識しています(そして、誰もすぐにチャイムを鳴らさない場合はそうするかもしれません)が、SOまたはGoogleのどこにも答えが見つかりませんでした。それは重要なようです:

AMDモジュールをrequire.jsで定義すると、次のようになります。

//a.js
define( ['stuff'], function (Stuff) {
     return { thing: new Stuff() };
}

そして、それを他の2つの異なるモジュールで使用します。

// b.js
define( ['a'], function(a) {
    // do something with a's stuff 
});

// c.js
define( ['a'], function(a) {
  //do something else with a's stuff
}

aの定義関数はStuff、別のモジュールで必要になるたびに 呼び出されますか(したがって、新しいインスタンス化されます)、または一度だけ呼び出され、その出力がキャッシュされますか?

明らかに、これはいくつかのユースケースでは重要ですが、require.js のドキュメントや私が見た他の例からは明らかではありません。

4

1 に答える 1

7

これを自分でテストしたところ、コンストラクターは 1 回しか実行されないようです。

// stuff.js
define(function() {
    return function() {
        console.log('making new!');
    };
});

// a.js
define( ['stuff'], function (Stuff) {
     return { thing: new Stuff };
});

// b.js
define( ['a'], function(a) {
});

// c.js
define( ['a'], function(a) {
});

// app.js
define(['b', 'c'], function() {
    console.log('app');
});

// index.html
<html>
<head>
    <script src='requirejs/require.js' data-main='app.js'></script>
</head>
</html>

index.html を開くと、コンソールに次のように表示されます。

making new!                             stuff.js:3
app                                       app.js:2
于 2012-06-08T14:38:14.243 に答える