seajsにおけるモジュール依存ロード処理例の解析

1946 ワード

この例では、seajsにおけるモジュール依存のロード処理について説明する.皆さんの参考にしてください.具体的には以下の通りです.
最近、プロジェクトをしているときにモジュール依存に関する問題を発見しました.
たとえば、既存の3つのファイル:

/*init.js*/
define(function(require, exports, module){
 require('jquery');
 require('jquery.plugA');
})
/*jquery.plugA.js*/
define(function(require, exports, module){
 require('jquery');
 require('jquery.plugB');
 //code...
})
/*jquery.plugB.js*/
define(functioin(require, exports, module){
 require('jquery');
 //code...
})


例えばinitを実行する.jsの場合、init.js、jquery.plugA.js、jquery.plugB.jsはjqueryに依存しますが、この場合seajsはjqueryに対してどのように処理しますか?一度だけ実行しますか?何回実行しますか?それとも他の方法ですか?
ここでは玉伯の答えを参考にします.
モジュール呼び出しに対する理解は、呼び出しとは、あるモジュールを取得するインタフェースを指す.SeaJSではseajsしかありません.use, require.async、およびrequireは、モジュール呼び出しを生成します.例えば、var a = require('./a')は、require('./a')を実行すると、モジュールのインタフェースを取得し、最初の呼び出しであれば、モジュールaを初期化し、後で呼び出すと、モジュールaのインタフェースに直接戻ります.defineはモジュール情報を登録するだけで、例えばパッケージ化後:define(id, deps, factory)はモジュールをseajsに登録する.Cacheではdefine類似:seajs.cache[id] = { id: id, dependencies: deps, factory: factory }純登録情報です.require('./a')の場合、seajs.cache['a'].factoryが実行され、seajs.cache['a'].exportsが実行されます.
拡張:URIとURLの違い
URI:Uniform Resource Identifiers、統合リソース識別子;
URL:Uniform Resource Loctors、統一リソースロケータ;
URN:Uniform Resource Name,統合リソース名
URL,URNはURIのサブセットである.
リファレンス
Module.STATUSの具体的な意味:https://github.com/seajs/seajs/issues/303URIとURLとURNをはっきり区別するhttp://www.ibm.com/developerworks/cn/xml/x-urlni.html
JavaScriptに関する詳細について興味のある読者は、「JavaScript拡張テクニックまとめ」、「JavaScript文字と文字列操作テクニックまとめ」、「JavaScript数学演算使い方まとめ」、「JavaScriptにおけるjson操作テクニックまとめ」、『JavaScriptエラーとデバッグテクニックまとめ』及び『JavaScriptデータ構造とアルゴリズムテクニックまとめ』
JavaScriptプログラムの設計に役立つことを願っています.