2011-10-23 6 views
9

私はrequire()を呼び出すメイン初期化スクリプトを持っており、依存関係の1つはユーティリティフレームワークですが、 )も、このフレームワークを依存関係として定義しています。例えばAMD(特にRequireJs)が複数のモジュール間で依存関係を処理する方法

(init.js):

require(['module-a', 'module-b', 'module-c'], function(a, b, c){ 
    // where module-c is the framework 
}); 

そして 'モジュール' 私は持っているで:

define(['module-c'], function(c){ 
    // utilize module-c framework 
}); 

を、どのようにAMD/RequireJsはそれが読み込まない、このシナリオを処理しません同じフレームワークは2回ですか?

助けてください。上記モジュールの

種類について、

マーク

答えて

6

それは一度だけロードされ、両方が「モジュール-C」の同じモジュール値を取得します。

+0

感謝を確認するために!それはまさに私が起こることを望んでいたのは、各モジュール内の依存関係を指定することがより理にかなっているからです。なぜなら、私はそのモジュールを利用して、全く別の別のプロジェクトで別のモジュールを再利用できるということでした。 – Integralist

+1

内部的には、AMDローダはすべてのモジュールを追跡(つまりキャッシュ)します。モジュールが最適化/連結されている場合、これは興味深いものではありません。しかし、いずれかのモジュールがジャストインタイムでロードされている場合は、AMDローダが_requests_を追跡し、2つのほぼ同時のリクエストが同じモジュールを複数回ダウンロードしようとしないことに注意することが重要です。 – unscriptable

2

包みなさい耐用他人へ - ここで私は、モジュールが二回ロードされた場所に出くわした状況だ:次のプロジェクト構造については

~/prj/js/app/fileA.js 
~/prj/js/app/util/fileB.js 
~/prj/js/ext/publisher.js 

RequireJs baseurl~/prj/js/app

ですfileA.jsは、外部(内線)依存性publisher.jsを次のように表します。

//fileA: 
define(['../ext/publisher'], function(){}); 

しかしfileB.jsは異なるパスで同じ依存を指す:依存が同じ場所にあるが、要するに

//fileB: 
define(['../../ext/publisher'], function(){}); 

は、両方のファイルのために、依存性経路が異なっています。この場合、publisher.jsは2回ロードされます。

使用FirebugののNetタブでは、それが二回ロードを参照します

これは簡単に(require_js docsで説明したように)外部のフォルダパスを設定するには、pathsを使用して固定されているdependency.js being loaded twice (firebug)

requirejs.config({ 
    paths: {ext: '../ext'} 
}); 

pathsを設定した後、依存関係は、1回だけfileA.jsfileB.jsでロードされ、両方とも同じ依存関係パスを使用します。次の:

//fileA: 
define(['ext/publisher'], function(){}); 

//fileB: 
define(['ext/publisher'], function(){}); 
関連する問題