将配置注入模块的最佳方法



我希望我的模块something.js依赖于配置,但我不希望它require配置本身,我希望我的编辑器继续能够分析模块并显示自动完成。 有没有一种干净的方法来做到这一点? 不幸的是,这是一个让编辑者感到困惑的解决方案。

class Something {
constructor (options) {
...
}
method () {
...
}
}
module.exports = options => module.exports = exports = new Something (options);

并在使用中:

// First use
const something1 = require ('./something')(options);
// All subsequent uses (expecting something1 to deep equal something2)
const something2 = require ('./something');

假设Something应该是一个单例,以下是我的做法:

const _inst = null;
const _init = options => {
if (!_inst) {
_inst = new Something(options);
}
return _inst;    
}
class Something {
constructor(options) {
}
method() {
}
}
module.exports = _init;

首先包含something将创建实例,然后后续调用(无论是否传递选项(将始终返回相同的实例。

只是需要注意的是,这与您想要的用法略有不同,这将涉及您必须两次调用函数,即

// First use
const something1 = require ('./something')(options);
// All subsequent uses
const something2 = require ('./something')();

还有多种其他方法可以做到这一点,即多次导出,但以上可能是最接近您所追求的语法。如果你可以访问import语法(你可以通过 Babel(,那么多次导入可能是更简洁的方式,即导出一个init函数和实例本身。

相关内容

最新更新