Node.JS的插件系统

Dom*_*omi 9 javascript plugins module 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
|   |   |   ...
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好,但是现在事情变得更复杂(他们总是只能得到更加复杂),因为我要考虑模块的初始化序列(因为他们可能依附到与处理器堆栈use,get,post,等. ), 和更多...

由于我对Node和Express还有点新手,我开始怀疑:是否有可能已经有一个好的引擎可以做到这一切?我找不到一个,这让我相信这可能是一个坏主意?也许有一个更"节点" - 或"表达" - 我可以忽略的做事方式?

谢谢你的帮助!

Pon*_*oni 5

不要浪费精力重新发明轮子 - 使用现有的名为NPM Modules的解决方案:)
你觉得这不是方法.

IMO的最佳方法是NodeJs的NPM模块,你可以自己写一些.

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

编辑#1:

  1. 您可以使用 private
  2. 对于高度专业化的子组件示例,我建议您查看PassportJS项目.它是关于Facebook和Google等外部平台的身份验证,您希望在项目中启用的每个平台都是一个单独的NPM模块.
  3. 是什么让你觉得你不能在运行时卸载/重装模块?是的,你可以.

  • 不确定我是否按照这个答案...想象创建20或30个这些模块.仅为这么多模块创建和维护单独的版本控制和npm包最终会产生过多的开销,特别是对于小型模块.不要计算所有的技巧,如npm链接,以使开发可管理.当然必须有一个比npm更好的方法吗? (7认同)