我希望我的模块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');
答案 0 :(得分:0)
假设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
函数和实例本身。