[追記 dateTime = "土曜の午前"]:このネタでこれからも書きそうだし、既にこのエントリーをブックマークされている方もいるようなので、ハブエントリーとして使えるように、最後に関連リンクを付け加えます。[/追記]
JSAN.jsにより提供されるJSANモジュールシステムについては以前紹介しました。もう1つ気になってるモジュールシステムがありまして、それはDojo(http://www.dojotoolkit.org/)のものです。
Dojoもザッと調べたので、ザッと(ほんとに概要を)記しておきます。
JSANとDojoは、モジュールシステムに関してだけ言えば、やっていることも機能性もほとんど同じです。モジュールのロードに関して、JSAN.require("Foo.Bar");
と、dojo.require("foo.Bar");
は同じことをします。Dojoには、大域スコープへの登録を行う機能(エクスポータ、use関数)はありませんが、特に不便はないでしょう。
Dojoでは、dojo.require("foo.*");
というワイルドカードが使えますが、*
を解決するために、__package__.jsというファイルを必要とする分、面倒になっています。個人的には、"foo.*"のような指定は不要だろう、と感じます。
JSANがソースファイルパスとモジュール名の厳密な一致を仮定しているのに対して、Dojoはdojo.provideという宣言構文があるので、複数のモジュールを同一ファイルに詰め込むことができます。(JSANの単純な方式のほうが僕は好きです。)
Dojoで不満なのは、JSAN.includePathに相当するサーチパスがないことですね。
For now, we do not have an implementation of a true search path. We consider only the single base script uri, as returned by getBaseScriptUri().
まとめておきましょう:
Dojo | JSAN | |
---|---|---|
ターゲット環境 | さまざま | 基本的にブラウザ |
モジュールのロード | dojo.require | JSAN.require |
ロード+大域登録 | なし | JSAN.use |
ワイルドカード | 使える | 使えない |
特殊なファイル | __package__.js | なし |
モジュール名 | dojo.provideで宣言 | ファイルパス名に対応 |
サーチパス | 単一ディレクトリ | 複数ディレクトリ可能 |
必要なファイル | 3つ+ユーザーオプション1つ | 1つ |
パッケージ命名規則 | Java風 | Perl風 |
JSANのほうが、「とりあえずこれで動くべ」的なザックリしたコーディングなのに対して、Dojoは精密な感じがします。が、それが良いかどうかはまた別で、僕の好みからはJSANを採ります。
どちらも似たような仕掛けなので、Dojo用に書かれたモジュールをJSAN向けにすること(とその逆)は困難ではないでしょう。Dojoのsrc/reflect/refrection.js という依存関係がないモジュールは、dojo/reflect.js と名前を変えて、ごく一部をコメントアウトしただけで、JSAN.require("dojo.reflect");
としてロードできました。ファイルを細かく分ければ、JSAN.require("dojo.reflect.Reflector");
のように、クラス単位のロードもできるでしょう。
●関連エントリー
順次メンテナンス、新しいものほど上です。