gpt4 book ai didi

javascript - 先导出函数,再导出对象

转载 作者:行者123 更新时间:2023-12-02 18:24:55 24 4
gpt4 key购买 nike

我有一个自定义模块,希望提供一种方法在第一个 require 上初始化它,但在后续的 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 };

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

但我想保留 obj 缓存,因为我真正的 init 做了一些我不想在每个 require 上执行的工作。

最佳答案

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

服务器.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 };

关于javascript - 先导出函数,再导出对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18488368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com