插件的Javascript模式?

插件的Javascript模式?,javascript,node.js,plugins,Javascript,Node.js,Plugins,[我对Javascript完全是新手,所以慢慢来。] 我正在node.js中开发一个应用程序,它将有一个插件列表。每个“插件”都应该是一个函数(或2),可以接受一个字符串并对其进行处理。应用程序应该依次调用每个插件并传递字符串。根据结果,它可能会调用该插件中的另一个函数,等等 用Javascript设计这个的最好方法是什么?我不介意在开发过程中修改应用程序以添加每个插件,但我宁愿避免经常这样做 现在我只是想为每个模块创建一个模块,然后在主应用程序中“需要”它并调用该函数,但这似乎有点笨拙,原因如

[我对Javascript完全是新手,所以慢慢来。]

我正在node.js中开发一个应用程序,它将有一个插件列表。每个“插件”都应该是一个函数(或2),可以接受一个字符串并对其进行处理。应用程序应该依次调用每个插件并传递字符串。根据结果,它可能会调用该插件中的另一个函数,等等

用Javascript设计这个的最好方法是什么?我不介意在开发过程中修改应用程序以添加每个插件,但我宁愿避免经常这样做

现在我只是想为每个模块创建一个模块,然后在主应用程序中“需要”它并调用该函数,但这似乎有点笨拙,原因如下:(a)我需要为每个新插件稍微更改父应用程序;(b)插件上没有我可以强制执行的接口。我有点希望有某种合同,我可以强迫插件遵守

您可以,并且需要每个文件。如果每个文件都向现有对象添加了一个函数(例如,
myapp.plugins
),那么您只需
forEach
对象并调用每个函数即可。如果不调用AST解析器等奇怪的操作,就无法在代码中强制执行契约;您最好对插件进行单元测试,以确保它们能够独立工作

编辑:


你能详细说明一下这一部分吗:“如果每个文件都向一个现有对象(比如myapp.plugins)添加了一个函数,那么你可以直接访问该对象并调用每个函数。”


您的体系结构尚不清楚,因此这只是您可以做的一个非常粗略的想法。

您能否详细说明一下这一部分:“如果每个文件向现有对象(例如myapp.plugins)添加一个函数,您只需访问该对象并调用每个函数即可。”?
var invokePlugins = function() {
  var args = arguments.slice(0);
  myapp.plugins.forEach(function(plugin) {
    plugin.apply(plugin, args);
  });
}
invokePlugins("this", "gets", "passed to", "each plugin");