多くのコードを含む jQuery プラグインを作成しています。したがって、コードを分離し、私 (開発者) にとってよりモジュール化することにしました。これには、require.js を使用します。
今私は6つのjsファイルを持っています:
- ユーティリティ.js
- base-row.jas
- a-row.js
- b-row.js
- my-table.js
- main.js
ファイル 1 から 5 は JavaScript の「クラス」を定義しており、それらの間には依存関係があります。すべてのコンサートを操作する「プライマリ」クラスは my-table.js です。main.js は my-table.js のみに依存し、そこからプラグインを作成します。
require([
'my-table'
], function(MyTable) {
jQuery.fn.myTable = function(options) {
var table = new MyTable(this, options);
this.data('myTable', table);
return this;
};
});
これらのファイルから、依存関係のない6つのファイルすべてを含む1つの大きなjsファイルを作成したいと思います(ユーザーが参照する必要があるjQueryを除く)。このために、r.js ( http://requirejs.org/docs/optimization.html ) を使用しました。その結果、require.js に依存する 1 つの大きな js ファイルを取得しました (また、define と require の呼び出しが含まれています)。私はこれに従いました:http://requirejs.org/docs/faq-optimization.html#wrap、almond.jsを使用して、require.jsに依存しない使用のためにすべてのファイルを結合しました。これはうまくいきます。
問題は、すべての define メソッド呼び出しと require メソッド呼び出し、および almond.js が必要な理由です。オプティマイザーが関数の結果のみを連結できなかったのはなぜですか (この質問で説明されているように:連結された RequireJS AMD モジュールにローダーが必要なのはなぜですか?) このような:
(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 ファイルが唯一のコンシューマです。どう思いますか?