2013-03-31 15 views
7

多くのコードを含むjQueryプラグインを作成しています。したがって、私はコードを分けて私のためにモジュール化することにしました(開発者)。このためにrequire.jsを使用します。requirejs - requirejsに依存しない単一のjsファイルに複数のファイルを結合する

  1. utils.js
  2. ベースrow.jas
  3. -row.js
  4. B-row.js
  5. 私-table.js:
    は、今私は6つのJSファイルを持っています5から
  6. main.js

ファイル1は、JavaScriptの "クラス" を定義し、彼らは間の依存性を持っています自分自身。すべてのコンサートを操作する「プライマリ」クラスはmy-table.jsです。 main.jsは私-table.jsに依存関係を持っており、それからプラグインを作成します。

require([ 
    'my-table' 
], function(MyTable) { 
    jQuery.fn.myTable = function(options) { 
     var table = new MyTable(this, options); 
     this.data('myTable', table); 
     return this; 
    }; 
}); 

今、私はそれらのファイルから(jQueryの以外の任意の依存関係なく、すべての6つのファイルが含まれている一つの大きなJSファイルを作成したいですユーザーはそれを参照する必要があります)。このために私はr.js(http://requirejs.org/docs/optimization.html)を使用しました。その結果、require.jsに依存する1つの大きなjsファイルがあります(定義して要求する呼び出しも含まれています)。私はこれに続いて:http://requirejs.org/docs/faq-optimization.html#wrapとrequire.jsに依存しない使用のために私のすべてのファイルを結合するために、アーモンド.jsを使用しました。これは正常に動作します。
なぜ、私はすべての定義とメソッド呼び出しとalmond.jsが必要なのでしょうか?このように:なぜオプティマイザは(Why do concatenated RequireJS AMD modules need a loader?この質問に説明するように):唯一の関数の結果を連結ことができませんでした。このプロセスの結果として

(function() { 
    var utils = «function() { 
     .... 
     return Utils; 
    }»(); 
    var baseRow = «function(A) { 
     .... 
     return BaseRow; 
    }»(utils); 
    .... 
    .... 
    var myTable = ..... 

    //<--This is require call and therefore doesn't return a thing 
    (function(MyTable) { 
     jQuery.fn.myTable = function(options) { 
      var table = new MyTable(this, options); 
      this.data('myTable', table); 
      return this; 
     }; 
    })(myTable); 
})(); 

、私は物事をチェックアウトすることを決定し、すべてのファイルを手動で組み合わせます1つのミニファイル。私は最終的に3kのファイルを小さくして、アーモンドのバージョンになります!
r.jsオプティマイザの背後にあるロジックがrequire.js依存結果を作成していないことがわかりました。私の場合、誰もファイルのいずれかを使用する必要はありません、私の主要なjsファイルは唯一の消費者です。どう思いますか?オプティマイザでfindNestedDependenciesオプションの

答えて

0

デフォルト値は、スクリプトが最適化された後も、まだモジュールローダを必要とするネストされたrequireまたはdefine呼び出しがあるかもしれないことを意味し、「偽」です。外部依存関係のためにローダーも必要です。

ただし、findNestedDependenciesが "true"に設定されていて、外部依存関係がプロジェクトに含まれていない場合、オプティマイザはローダーの必要性を取り除くことができるはずです。

-1

ファイルに必要なファイルだけを含めることができます。 getScript呼び出しでこれを行うことができます。

$.getScript("my_lovely_script.js", function(){ 

    //whatever you want here. 

}); 
関連する問題