[ Node ] require 的單例現象

以下內容爲初步的實踐,並未深入探究。可能純在片面性。僅僅爲開發過程中發現的問題,以及原因的筆記(不一定正確)。

NodeJS的模塊默認情況下是單例性質的,不過其並不能保證如我們編程時設想的那樣一定是單例,根據NodeJS的官方文檔中描述,某個模塊導入是否爲單例受以下兩個因素的影響:

  • Node 模塊的緩存機制是大小寫敏感的,譬如如果你require('/foo')require('/FOO')會返回兩個不同的對象,儘管你的foo與FOO是完全相同的文件。

  • 模塊是基於其被解析得到的文件名進行緩存的,鑑於不同的模塊會依賴於其被調用的路徑進行緩存鑑別,因此並不能保證你使用require('foo')會永遠返回相同的對象,可能會根據不同的文件路徑得到不同的對象。

簡單實踐 

寫一個 test.json 文件:

{
  "text": "hello world",
  "mark": "這是一個標記"
}

在寫一個 test.js 用 require 導入 test.json 文件

const first = require('./test.json')
console.log('first', first) // "{ text: 'hello world', mark: '這是一個標記' }"
delete first.text // 刪除first對象中的 text 字段

const second = require('./test.json')
console.log('second', second) // "second { mark: '這是一個標記' }"

const third = require('./Test.json')
console.log('third', third) // "third { text: 'hello world', mark: '這是一個標記' }"

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章