1. 程式人生 > >Node.js中require()單例

Node.js中require()單例

div 改變 大小寫 get() 模塊 console 小寫 require req

我剛接觸Node.js沒多久,對於其中的一些知識還不是很了解。例如在使用require()方法來家載模塊時,我就很好奇模塊中的對象是一種怎樣的狀態,是每次調用require()的時候裏面的對象要重新new,還是只new一次,每次require()的時候拿到的對象都是相同的。後來查看一些資料才發現,require()相同模塊(相同路徑,大小寫敏感)得到的模塊中的對象都是單例的。在require()首次加栽的時候,Node為其生成一個鍵,然後將其寫入緩存,後面再使用require()的時就會從緩存中去找,如果存在,就直接返回緩存中的模塊。那麽下面就用一個小例子來驗證一下。

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. 命令行輸入

node test.js

得到結果

2
5

可以看出object1和object2都是require的相同模塊,改變object2中的變量值,object1中的值也跟著改變了,說明他們指向的是同一個對象。我們可以利用這種機制,設置一些全局的對象,就不要使用Node.js中的一些全局對象,便於代碼維護。

以上就是我對Node.js中require()機制的理解,希望可以幫到大家!

Node.js中require()單例