插件的 JavaScript 模式

Javascript pattern for plugins?

本文关键字:模式 JavaScript 插件      更新时间:2023-09-26

[我是Javascript的新手,所以慢慢来。

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

在Javascript中设计它的最佳方法是什么?我不介意必须修改应用程序以添加其开发的每个插件,但宁愿避免这样做很多。

现在我只是在考虑为每个模块创建一个模块,然后在主应用程序中"需要"它并调用该函数,但这似乎很笨拙,原因有几个:(a) 我需要为每个新插件安静地更改父应用程序,(b) 没有我可以在插件上强制执行的接口。我有点希望有某种合同可以迫使插件尊重。

您可以列出插件目录,并需要每个文件。如果每个文件都向现有对象添加一个函数(例如,myapp.plugins ),则只需forEach该对象并调用每个函数即可。如果不做一些奇怪的事情,比如调用 AST 解析器,你就无法真正在代码中强制执行合约;你最好对插件进行单元测试,以确保它们独立工作。

编辑:

您能否详细说明一下这部分:"如果每个文件向现有对象(例如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");

你的架构不清楚,所以这只是你能做什么的一个非常粗略的想法。