设置npm模块配置的最佳方法是什么?

时间:2014-12-29 07:10:11

标签: javascript node.js module npm

我正在寻找一种为我正在进行的npm模块设置配置的好方法。

该模块有两个函数notify.sms.send()notify.email.send()。我还提供了第三个抽象函数,它调用notify.send()两个(或任何启用的)。

我有一个名为notify.cfg的对象,它只是一个简单的对象哈希{}

我想知道这是否是一个很好的方法。因为它是一个模块,我不能硬编码任何东西,配置应该在需要模块时传入....像这样:

//setup smtp server
var smtp = {
    host: xxx,
    user: user,
    pass: pass,
    port: port
};

//setup email headers
var email = {
    to: 'user@example.com',
    from: 'sender@example.com'
};

var notify = require('app-notify');

//set your configuration
notify.cfg.email = email;
notify.cfg.smtp = smtp;

notify.cfg的签名是这样的:

var cfg = {};
exports.cfg = cfg;

在测试我在notify.cfg = myConfig测试中覆盖beforeEach的位置时,我遇到了一些问题,似乎仍然保留了以前运行过的测试中的旧数据。我不知道它的配置是否适用于我的模块或我正在编写测试的方式。

对于任何感兴趣的人,代码都在这里:https://github.com/chovy/app-notify

1 个答案:

答案 0 :(得分:1)

您正在有效地进行配置单例,因此包变得不太可用。典型的API如下所示:

var Notify = require('app-notify');
var notify = new Notify({
  email : ...
  smtp : ...
});

如果用户想要一个单独的notify对象,他们只能module.exports = new Notify({...})并在其他地方需要它。

您的index.js文件如下所示:

function Notify(config) {
  if (!(this instanceof Notify))
    return new Notify(config);

  ....
}

module.exports = Notify;

instanceof检查用于省略new关键字。