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

时间:2018-05-10 14:03:31

标签: javascript node.js module require

我希望我的模块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');

1 个答案:

答案 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函数和实例本身。