我知道CommonJS模块只能加载一次。假设我们有一个基于散列导航的单页应用程序,当我们导航到之前加载的页面时,代码不会重新运行,因为它已经被加载了一次,这就是我们想要的。
如何重新加载模块的内容,就像它已经初始化一样?例如,如果我在本地存储中有一些数据发生了变化,我该如何运行一个函数来更新这个数据和/或在以前加载的模块中更新这些数据的最佳方法是什么?
答案 0 :(得分:1)
您可以将其包装在函数中,然后在每次需要该内容时调用该函数,而不是直接导出模块的内容。我将此模式用于模块可能需要的任何类型的初始化。这是一个简单(而且愚蠢)的例子:
// this module will always add 1 to n
module.exports = function(n) {
return 1 + n;
}
VS
module.exports = function(n1) {
// now we wrapped the module and can set the number
return function(n2) {
return n1 + n2;
}
};
var myModule = require('that-module')(5);
myModule(3); // 8
另一个包含更改数据的示例:
// ./foo
module.exports = {
foo: Date.now()
};
// ./bar
module.exports = function() {
return {
foo: Date.now()
};
};
// index.js
var foo = require('./foo');
var bar = require('./bar');
setInterval(function() {
console.log(foo.foo, bar().foo);
}, 500);