このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

JSAN vs. Dojo (モジュールシステム)

[追記 dateTime = "土曜の午前"]:このネタでこれからも書きそうだし、既にこのエントリーをブックマークされている方もいるようなので、ハブエントリーとして使えるように、最後に関連リンクを付け加えます。[/追記]

JSAN.jsにより提供されるJSANモジュールシステムについては以前紹介しました。もう1つ気になってるモジュールシステムがありまして、それはDojohttp://www.dojotoolkit.org/)のものです。

Dojoもザッと調べたので、ザッと(ほんとに概要を)記しておきます。

JSANDojoは、モジュールシステムに関してだけ言えば、やっていることも機能性もほとんど同じです。モジュールのロードに関して、JSAN.require("Foo.Bar"); と、dojo.require("foo.Bar"); は同じことをします。Dojoには、大域スコープへの登録を行う機能(エクスポータ、use関数)はありませんが、特に不便はないでしょう。

Dojoでは、dojo.require("foo.*"); というワイルドカードが使えますが、*を解決するために、__package__.jsというファイルを必要とする分、面倒になっています。個人的には、"foo.*"のような指定は不要だろう、と感じます。

JSANがソースファイルパスとモジュール名の厳密な一致を仮定しているのに対して、Dojodojo.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");のように、クラス単位のロードもできるでしょう。

関連エントリー

順次メンテナンス、新しいものほど上です。