我正在編寫包含大量代碼的jQuery插件。因此,我決定將代碼分開,並使其對我更爲模塊化(開發人員)。爲此,我使用require.js。
現在我有6個js文件:requirejs - 將多個文件合併到不依賴於requirejs的單個js文件
- utils.js
- 基row.jas
- A-row.js
- B-row.js
- 我-table.js
- main.js
文件1到5定義的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;
};
});
現在我想從這些文件創建一個包含所有的6個文件沒有任何依賴一個大的js文件(jQuery的除外用戶應該參考它)。爲此,我使用了r.js(http://requirejs.org/docs/optimization.html),結果我得到了一個依賴於require.js的大型js文件(並且包含調用來定義和需要)。我遵循這個:http://requirejs.org/docs/faq-optimization.html#wrap並使用almond.js爲了組合所有我的文件的使用不依賴於require.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);
})();
作爲這一進程的結果,我決定檢查的事情了和手動相結合的所有文件一個縮小的文件。我最終得到一個小於3k的文件,然後是杏仁版本!
我沒有找到r.js優化器創建require.js相關結果的邏輯。在我的情況下,沒有人需要使用任何文件,我的主要js文件是唯一的消費者。你怎麼看?