2013-02-26 43 views
0

我在另一個問題中讀到,現在我找不到在node.js中創建模塊是個壞主意,然後他改變了他的答案, node.js在node.js的其他文件中使用全局模塊

github上express.js的示例現在顯示一個示例。 https://github.com/visionmedia/express/tree/master/examples

那麼,如果我需要多個文件中的相同模塊,如sequelize或async?

app.js:

var document = require('./routes/document') 
async = require('async'); 

/routes/document.js:

async.series([...]); 

OR

app.js:

var document = require('./routes/document') 
var async = require('async'); 

/路由/ DOC ument.js:

var async = require('async'); 
async.series([...]); 

我應該再次要求異步模塊中document.js,或只是讓異步全球,這樣我可以使用它,而它需要在新的文件嗎?

回答

1

總之,將它包含在每個文件中。該文件在第一次請求後被緩存,因此內容實際上只運行一次(您可以通過在require中放入一條日誌語句來進行測試;它只會顯示一次)。

我所做的是製作一個文件,它需要我需要的所有其他文件,並將它們全部導出。那麼你只需要一個文件。當你有很多模塊時,這可以非常方便。

0

要求一個模塊不止一次沒有任何問題。內部require只執行一次所需的文件,然後緩存結果。請參閱Node.js Modules documentation瞭解更多信息。

2

不要使用全局變量來訪問模塊。始終使用require,並且只需要在該.js文件中需要()所需的模塊。要求只會加載你的模塊一次,並持有一個參考。

只需要你需要的東西,即使它是幾個模塊,也是很好的,因爲它明確了你的代碼的依賴關係,並且可能會幫助你稍後重構你的代碼。

只需要()你需要的也可以幫助在你想用另一個模塊替換一個模塊的地方。例如,您可能想用新的aws-sdk模塊替換knox(S3)。當您移除knox npm模塊時,require會立即在使用/需要使用knox的文件中爆炸。如果它是一個全局變量,則需要查找對該全局引用的所有引用,並依靠IDE或文本編輯器來查找它。

相關問題