2013-08-28 54 views
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'); 

other.js:

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

module.js:

var obj = null; 

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

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

我怎么能窝k围绕这个问题?还是有一个既定的模式实现这样的?

但我想保留obj缓存,因为我的真实init做了一些工作,我宁愿不要在每个require上做。

回答

2

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

server.js:

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

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

other.js:

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

module.js:

var obj = null; 

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

module.exports = { init: init }; 
相关问题