簡體   English   中英

如何解決node.js中的模塊緩存警告(單個問題)?

[英]How to solve module caching caveats in node.js (singleton issue)?

繼另一個問題之后 ,我了解到我面臨模塊緩存警告問題 顯然,在我的項目中創建了相同模塊的多個實例。

我需要位於不同文件夾中的其他模塊中的模塊:

var mm = require("./myModule.js");
...

var mm = require("../myDir/myModule.js");
...

var mm = require("../../MyDir/myModule.js");
...

我一直在嘗試使用對象並通過將其導出來創建myModule (singleton)的唯一實例:

var myModule = function() {

    if (!(this instanceof myModule)) { return new myModule(); }

    ...

};

...

module.exports = new myModule();

但是,它不能解決問題。 在node.js中聲明單例的正確方法是什么? 以及如何在其他模塊中檢索實例?

這是Windows的問題:Windows中的文件路徑不區分大小寫,因此./File.txt./file.txt引用相同的文件。 問題在於,該節點不知道這一點,而是使用已解析的文件路徑作為緩存鍵,因此可以使用不同的大小寫多次加載同一模塊。

有關該問題和討論的更多信息: https : //github.com/joyent/node/issues/6000

解決方案(種類):不要在節點項目中的文件名和目錄名中使用大寫

該模式絕對適用於單例。

// singleton.js

module.exports = new Singleton

function Singleton () {
  this.rand = Math.random()
}

// one.js

var singleton = require('./singleton')
console.log(singleton.rand)

// two.js

require('./one')
var singleton = require('./singleton')
console.log(singleton.rand)

確保足夠一致的輸出。

0.7851003650575876
0.7851003650575876

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM