開発者がjavascriptモジュール、モジュールローダー、ビルドツールを使用するために利用できるさまざまなアプローチを評価する過程で、使用するツールとその理由についていくつか提案したいと思います。
私は現在、次のことができるものを求めています
。-モジュラーコード
を奨励する-特定のモジュールに必要性に基づいて機能を追加できるようにする[ミックスイン/継承を考える]
-開発リリースを含むBUILDを作成し、少なくとも異なるレイヤーを含む本番リリース(たとえば、ブートストラップコード、モジュール1、2、および3を含むレイヤー[スクリプト]が必要です。次に、モジュール4、5、および6を含む別のレイヤーが必要です。このようにして、コードの読み込みを延期できます。アプリケーションで実際に何が起こっているかに基づいています。)
-非常に低帯域幅のシナリオで、1kbpsのxfer速度と高遅延で動作します(GPRSを介した最悪の場合のモバイル接続を考えてください)。
私は次のことを見てきました:次のように、プロトタイプの継承を使用します。
myNS.thing = function(){};
myns.thing.prototype = {
something: "foo"
}
これは、このスクリプトの内容を取得し、それを次のスクリプトに追加するだけで作成できます。これは、本番環境に最適化されたパッケージに単一のスクリプトとして含めることができます。この場合のローダーは、既知のファイルに基づく単純なスクリプトタグインジェクション/評価などです。
私はまた、次のような他のアプローチを見てきました:
function(){
return function(){
something: "foo"
}
}();
スクリプトを操作し、ラッピング自己実行関数を削除し、戻り値を1つのオブジェクトに結合する必要があるため、これの構築はすでに複雑になっています。利用可能なビルドツールを「簡単に」使用する方法を知りません。ローダーのアプローチは上記と同じように機能します。
これらのアプローチはどちらも依存関係がありません。
次に、AMDがあります。
define("mymodule", ["dep1"], function(dep1){
return {something: dep1}
});
一部の人はそのインデントとその「儀式」によって不快感を覚えるかもしれませんが、それでも非常に効果的であり、グーグルクロージャーコンパイラはそれをネイティブに知っており、依存関係を知っており、全面的に広く採用されているようです。多数のモジュールローダー(https://docs.google.com/spreadsheet/ccc?key=0Aqln2akPWiMIdERkY3J2OXdOUVJDTkNSQ2ZsV3hoWVE#gid=2)と、かなりの数のビルドツールがあります。
他にどのようなオプションを知っていますか、または本番環境で使用されているのを見たことがありますか?
すでに述べたように、私はコード構文、ローダーツール、ビルドツールの組み合わせに興味があります。これらの3つが存在し、適切に連携している必要があります。残りは私が興味のない学術的な演習です。