我正在寻找一种为我正在进行的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
答案 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
关键字。