2013-03-31 69 views
7

我正在編寫包含大量代碼的jQuery插件。因此,我決定將代碼分開,並使其對我更爲模塊化(開發人員)。爲此,我使用require.js。
現在我有6個js文件:requirejs - 將多個文件合併到不依賴於requirejs的單個js文件

  1. utils.js
  2. 基row.jas
  3. A-row.js
  4. B-row.js
  5. 我-table.js
  6. 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文件是唯一的消費者。你怎麼看?

回答

0

findNestedDependencies在優化選項是「假的」,這意味着腳本優化後,也有可能仍然是一個嵌套requiredefine調用需要一個模塊加載器的默認值。外部依賴關係也需要加載器。

我同意,但是,如果findNestedDependencies設置爲「真」,沒有外部依賴是項目的一部分,優化器應該能夠刪除其需要用於裝載機。

-1

您可以直接在文件中包含所需的文件。您可以使用getScript調用來完成此操作。

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

    //whatever you want here. 

});