Node.JS的插件系统

我目前正在使用Express来处理Node.JS中的一个大型应用程序。

我希望能够做到即插即用,所以我开始编写我自己的小插件系统,其文件结构如下所示:

root/ | plugins.json # configures all plugins | plugins # contains all plugins | | MyPlugin # contains MyPlugin | | | MyPlugin.js # defines Application hooks for MyPlugin | | | ... 

MyPlugin/当然也包含路由,控制器,视图,特定的资源等。

app将调用MyPlugin实例的标准挂钩是:

 moduleInit(app) # before starting the server or module has been loaded (if server is already running at module load) moduleStart(app) # right after server has been started or not at all moduleCleanup(app) # right before the party ends 

到目前为止,这么好,但现在事情变得更加复杂(而且它们总是会变得更加复杂),因为我必须考虑模块初始化的顺序(因为它们可能会usegetpost等等),以及更多…

因为我对Node和Express还是有点新鲜的,所以我开始怀疑:现在是否有一个好的引擎可以做到这一点? 我找不到一个,这导致我相信这可能是一个坏主意? 也许有更多的“节点” – 或“expression” – 做我忽略的事情的方式?

谢谢你的帮助!

       

网上收集的解决方案 "Node.JS的插件系统"

不要浪费精力重新发明车轮 – 使用名为NPM模块的现有解决scheme:)
你是对的,觉得这不是方法。

对于它来说,IMO的最好的方法是NodeJs的NPM模块,你可以自己写一些模块。

至于“get”/“post”/ etc的处理程序绑定执行顺序,你仍然可以控制包的加载顺序,不要忘记,所以你可以用“标准”的方式来实现。

编辑#1:

  1. 你可以使用private
  2. 对于高度专业化的子组件,我可以推荐你看看PassportJS项目。 这是关于如Facebook和Google等外部平台的authentication,并且您希望在项目中启用的每个平台都是独立的NPM模块。
  3. 是什么让你觉得你不能在运行时卸载/重新加载模块? 是的,你只是可以。

我没有使用它,但build筑师可能适合法案https://github.com/c9/architect

Architect是Node.js应用程序的简单而强大的结构。 使用Architect,您可以设置一个简单的configuration,并告诉Architect您要加载的插件。 每个插件注册自己的build筑师,所以其他插件可以使用其function。 插件可以作为NPM包维护,以便可以将其插入到其他架构师应用程序中。