0

我有一个自定义模块,想提供一个方法来初始化它require,但在后续需要时直接返回一个对象。

但是模块在第一次需要时会被缓存,因此后续需要仍然返回init函数而不是obj直接返回。

server.js:

var module = require('./module.js');
var obj = module.init();
console.log('--DEBUG: server.js:', obj); // <-- Works: returns `obj`.

require('./other.js');

其他.js:

var obj = require('./module.js');
console.log('--DEBUG: other.js:', obj); // <-- Problem: still returns `init` function.

模块.js:

var obj = null;

var init = function() {
    obj = { 'foo': 'bar' };
    return obj;
};

module.exports = (obj) ? obj : { init: init };

我该如何解决这个问题?或者是否有一个既定的模式来实现这一目标?

但我想保持obj缓存,因为我的真实init做了一些我不想在每个require.

4

1 回答 1

2

有一些方法可以清除 require 缓存。您可以在这里查看node.js require() 缓存 - 可能无效? 但是,我认为这不是一个好主意。我会建议通过你需要的模块。即只初始化一次并将其分发给其他模块。

server.js:

var module = require('./module.js');
var obj = module.init();

require('./other.js')(obj);

其他.js:

module.exports = function(obj) {
    console.log('--DEBUG: other.js:', obj); // <-- The same obj
}

模块.js:

var obj = null;

var init = function() {
    obj = { 'foo': 'bar' };
    return obj;
};

module.exports = { init: init };
于 2013-08-28T12:59:27.577 回答