我剛接觸Node.js沒多久,對於其中的一些知識還不是很瞭解。例如在使用require()方法來家載模塊時,我就很好奇模塊中的對象是一種怎樣的狀態,是每次調用require()的時候裏面的對象要從新new,仍是隻new一次,每次require()的時候拿到的對象都是相同的。後來查看一些資料才發現,require()相同模塊(相同路徑,大小寫敏感)獲得的模塊中的對象都是單例的。在require()首次加栽的時候,Node爲其生成一個鍵,而後將其寫入緩存,後面再使用require()的時就會從緩存中去找,若是存在,就直接返回緩存中的模塊。那麼下面就用一個小例子來驗證一下。node
1. 編寫object1.js緩存
let value = 0 function set(input) { value = input } function get() { return value } exports.set = set exports.get = get
2.編寫測試代碼test.js測試
const object1 = require('./object1.js') const object2 = require('./object1.js') object1.set(1) object1.set(2) console.log(object1.get()) object2.set(5) console.log(object1.get())
3. 命令行輸入ui
node test.js
獲得結果spa
2 5
能夠看出object1和object2都是require的相同模塊,改變object2中的變量值,object1中的值也跟着改變了,說明他們指向的是同一個對象。咱們能夠利用這種機制,設置一些全局的對象,就不要使用Node.js中的一些全局對象,便於代碼維護。命令行
以上就是我對Node.js中require()機制的理解,但願能夠幫到你們!code