requirejs では、名前を文字どおりに設定せずにモジュールを定義できます。次に例を示します。
//in a.js
define([/*deplist*/],function(){
/*do something*/
});
//in b.js
define([/*deplist*/],function(){
/*do something*/
});
また、requirejs はファイル名 ("a" と "b") に従ってモジュール名を設定します。Requirejs は<script>
、アプリケーションが必要とするすべてのタグを追加します。それらは順番にロードされません (ネットワーク タイムラインが言ったように)。
モジュールが自分自身を定義するために呼び出されたときdefine
、それはそのモジュール名を認識していないため、自分自身をdefQueue
初期化の待機状態に置きます。初期化はロード イベント ハンドラで行われます。これは、イベント ハンドラ関数でノード参照にアクセスでき、モジュール名がノード属性に記録されるためです (このように: <script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="a" src="./a.js"></script>
)。
ここに問題があります。モジュール呼び出しの順序が、define
モジュールのノードload
イベント トリガーと同じであることを保証できません。では、モジュール名をモジュール ファクトリに正しくマッピングするにはどうすればよいでしょうか。