2014-08-29 73 views
2

默認的方法,我常常看到的是:爲什麼我需要每個文件上的所有模塊?

// repeat this in all files 
var express = require('express'); 
var mongoose = require('mongoose'); 
var async = require('async'); 
... 

但在我的應用程序的NodeJS我這樣做是:

// include this only on the server file 
_express = require('express'); 
_mongoose = require('mongoose'); 
_async = require('async'); 
... 

我更喜歡使用_前綴標識庫/模塊和我不請使用var,因爲我不想在我的應用程序的每個文件中重複所有包的要求/設置。

這種方式我可以require()模塊只有一次server.js文件,並在任何地方使用它。

這是一個壞主意嗎?

+2

我認爲在全球範圍內保持依賴關係是「不好的做法」。這並不是說沒有優惠的情況(因爲它可能會非常方便地爲全球各地使用的某些東西設置全局別名),但是要謹慎行事 - 而不是默認選擇。 – user2864740 2014-08-29 20:06:31

回答

5

模塊緩存在nodejs中。最好的做法是在需要的地方提出要求。

從node.js的文檔:

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

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

http://nodejs.org/api/modules.html

+0

你能解釋一下嗎?這是關於內存開銷嗎?例如,貓鼬......我需要模塊並將它連接到總是?這是一個很好的做法嗎? – user3175226 2014-08-29 20:07:06

+2

您只連接一次。當你需要在你的其他模塊中使用貓鼬時,你可以使用'var mongoose = require('mongoose');'和你的連接獲得相同的貓鼬對象。你可以通過在模塊中執行'console.log(mongoose.connection);'來測試。 – Jordonias 2014-08-29 20:26:11

+1

應該注意的是,你可以用'mongoose.createConnection'連接貓鼬。默認連接('mongoose.connection')是用'mongoose.connect'建立的連接 – Jordonias 2014-08-29 20:32:20

1

在您的前端開發(的情況下,它不只是一個服務器端節點的問題),你肯定可以讓你需要一個基地或主JS上,讓他們在全球範圍引用,追加到窗口,文檔或任何其他高度範圍的對象,但最好的做法是僅在需要時加載模塊。

相關問題