2013-04-12 11 views
0

由於require.js是AMD模塊加載,同時限定像一個新的模塊:在require.js中定義全新模塊時使用導出是否合適?

 
define(["jquery"],function($){ 
    var _private; 
    var obj = { 
     pubFunc:... 
    } 
    return obj; 
}); 

 
define(["jquery","exports"],function($,exports){ 
var pubFunc; 
exports.pubFunc = pubFunc; 

}); 

它是第二個是不恰當的Require.js的定義新的模塊?

+0

你問是否第二種形式是_possible_?或者如果它是_recommended_? –

+0

@ PaulPhillips,是的 – Lanston

回答

2

TL; DR:第一個是如何設計RequireJS(使用那個);第二個不是。

更多信息:

它看起來像你混淆了節點的要求RequireJS。

第二,通過向後導出(轉換爲依賴關係),您幾乎可以顛倒依賴鏈的方向。

這將實際工作的大部分時間:

exports.pubFunc = pubFunc; 

只要認爲:

  • JavaScript對象按引用傳遞,所以屬性將被添加到由RequireJS舉行的exports對象;和
  • RequireJS將繼續分發修改後的exports對象,每當需要exports時。

但是,這完全依賴於RequireJS的緩存。作爲優化,RequireJS存儲模塊的導出,而不是每次加載文件;因此exports的緩存版本將被重新分配(完成後添加您添加的屬性)。

因此,當緩存的對象未傳遞時,例如在不同的RequireJS contexts中,這會中斷。

您應該將導入視爲不可變的,即使您可以修改它們。

相關問題