2

開発者が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つが存在し、適切に連携している必要があります。残りは私が興味のない学術的な演習です。

4

2 に答える 2

0

javascriptプロジェクトを構築するためのさまざまなモジュールを備えたコマンドラインツールであるGruntをご覧になることをお勧めします。依存関係にnpmを使用し、amdモジュールで動作しますが、 grunt-buildconcatを使用して必要なファイルを連結するように構成するだけです。

于 2013-01-11T15:40:14.910 に答える
0

個人的には、AMD ソリューションである RequireJS を使用しています。簡単な概念実証を作成している場合は、わざわざ設定する必要はありませんが、現在私が知っている最も一般的なソース/デップ マッピング ソリューションには次のものがあります。

  • RequireJS
  • CommonJS
  • グーグル閉鎖
  • YepNope (条件付きローダー、他のものと組み合わせて使用​​できます)

Require を Backbone と組み合わせて使用​​するボイラープレートを開始して、すべての醜いセットアップ コードを邪魔にならないようにしました。

https://github.com/nick-jonas/assemblyjs

そのため、入力assemble initして基本プロジェクトをスキャフォールディングしassemble build、コンパイラを実行して、本番環境に対応した最終的なビルドを取得できます。

于 2013-01-11T14:49:20.540 に答える