2014-12-25 4 views
0

[Я новичок в Javascript, поэтому делайте это медленно.]Шаблон Javascript для плагинов?

Я работаю над приложением в node.js, которое будет иметь список плагинов. Каждый «плагин» должен быть функцией (или 2), которая может принимать строку и что-то делать с ней. Приложение должно вызывать каждый плагин по очереди и передавать ему строку. В зависимости от результата он может вызвать другую функцию в этом плагине и т. Д.

Каков наилучший способ создать это в Javascript? Я не возражаю, чтобы изменить приложение, чтобы добавить каждый плагин в его разработку, но скорее избег бы сделать это много.

Сейчас я просто думаю, что создал модуль для каждого модуля, затем «потребовал» его в основном приложении и вызвал функцию, но это кажется неуклюжим по нескольким причинам. (A) Мне нужно изменить родительское приложение тихо бит для каждого нового плагина, (b) нет интерфейса, который я могу обеспечить для плагинов. Я как бы надеялся, что есть какой-то контракт, который я мог бы заставить плагины уважать.

ответ

1

Вы можете указать list the plugin directory и потребовать от каждого файла. Если каждый файл добавляет функцию к существующему объекту (скажем, myapp.plugins), вы можете просто указать forEach объект и вызвать каждую функцию. Вы не можете реально заключить контракт в коде, не делая странных вещей, таких как вызов анализатора AST; вам лучше выполнять модульное тестирование на плагинах, чтобы убедиться, что они работают изолированно.

EDIT:

Можете ли вы разработать немного по этой части: «Если каждый файл добавляет функцию к существующему объекту (например, myapp.plugins), вы можете просто Foreach объект и вызвать каждую функцию . "?

var invokePlugins = function() { 
    var args = arguments.slice(0); 
    myapp.plugins.forEach(function(plugin) { 
    plugin.apply(plugin, args); 
    }); 
} 
invokePlugins("this", "gets", "passed to", "each plugin"); 

Ваша архитектура неясна, так что это просто очень приблизительное представление о том, что вы могли бы сделать.

+0

Можете ли вы немного рассказать об этой части: «Если каждый файл добавляет функцию к существующему объекту (скажем, myapp.plugins), вы можете просто использовать для каждого объекта и вызывать каждую функцию».? – Mike

+0

Большое спасибо за редактирование. – Mike

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