重新加载/重新初始化/刷新CommonJS模块

时间:2015-04-06 01:38:07

标签: javascript node.js requirejs single-page-application amd

我知道CommonJS模块只能加载一次。假设我们有一个基于散列导航的单页应用程序,当我们导航到之前加载的页面时,代码不会重新运行,因为它已经被加载了一次,这就是我们想要的。

如何重新加载模块的内容,就像它已经初始化一样?例如,如果我在本地存储中有一些数据发生了变化,我该如何运行一个函数来更新这个数据和/或在以前加载的模块中更新这些数据的最佳方法是什么?

1 个答案:

答案 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);