2014-12-29 3 views
0

Я ищу хороший способ настройки конфигурации для модуля 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: '[email protected]', 
    from: '[email protected]' 
}; 

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

Вы эффективно делая конфигурацию одноплодных таким образом пакет становится менее полезным. Типичный 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 ключевое слово.

+0

Можете ли вы дать мне подпись того, что выглядит ./index.js с помощью этого метода? Я думаю, что это больше связано с тем, что мне нужно. – chovy

Смежные вопросы