2013-06-28 36 views
1

在Node.js的,一些模塊出口對象在節點中,爲什麼某些模塊導出函數?

var Constructor = function() {}; 
exports.MyObject = new Constructor(); 
// or 
module.exports = new Constructor(); 

和一些模塊導出功能:

var Constructor = function() {}; 
exports.MyConstructor = Constructor; 
// or 
module.exports = Constructor; 

當我應該導出對象時,我應該導出功能?

回答

0

一個考慮可能是模塊模塊的caching功能。來自文檔;我的重點是:

模塊在第一次加載後被緩存。這意味着 (其中包括)每次調用require('foo')將獲得 完全相同的對象返回,如果它將解析爲相同的 文件。

多次調用require('foo')可能不會導致多次執行模塊代碼爲 。這是一個重要的功能。通過它,可以返回 「部分完成」的對象,從而允許即使在它們會導致循環時也加載依附關係。

如果您想讓模塊多次執行代碼,則導出 函數,然後調用該函數。

+0

我不清楚「這是一個重要的特性。有了它,可以返回」部分完成「的對象,從而允許傳遞依賴性被加載,即使它們會導致週期。」爲什麼,如果模塊代碼只執行一次,「多次調用require('foo')**可能不會導致模塊多次執行。」。 「可能」在「可能」中有什麼關係? –

+1

「*** may ** not *」表示緩存[基於文件位置](http://nodejs.org/api/modules.html#modules_module_caching_caveats)。如果您在多個位置安裝了相同的模塊(作爲多個項目的依賴項,或者有時在沒有['npm dedupe'](https://npmjs.org/doc/dedupe.html))的'npm install'中,每個模塊都會有它自己的副本緩存。 –

相關問題