Javascript Node.JS插件系统

Javascript Node.JS插件系统,javascript,node.js,plugins,express,module,Javascript,Node.js,Plugins,Express,Module,我目前正在开发中的一个大型应用程序 我希望能够实现即插即用,所以我开始编写自己的小插件系统,其文件结构如下: root/ | plugins.json # configures all plugins | plugins # contains all plugins | | MyPlugin # contains MyPlugin | | | MyPlugin.js # defines

我目前正在开发中的一个大型应用程序

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

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

到目前为止,很好,但是现在事情变得更复杂了(而且它们总是会变得更复杂),因为我必须考虑模块初始化的顺序(因为它们可能附加到处理程序堆栈中使用<代码>使用< /代码>,<代码>获取< /代码>,<代码> POST < /代码>等),并且更多…

由于我对Node和Express还有些陌生,我开始怀疑: 有没有可能已经有一个好的引擎可以做到这一切?我找不到一个,这让我相信这实际上可能是个坏主意?也许有一种更“节点”或“表达”的方式来做我忽略的事情


谢谢你的帮助

不要在重新发明轮子上浪费能源-使用名为:)的现有解决方案
你觉得这不是办法是对的

IMO,最好的方法是NodeJs的NPM模块,您可以自己编写一些

至于“get”/“post”/etc的处理程序绑定执行顺序,您仍然可以控制包加载顺序,不要忘记这一点,这样您就可以以“标准”的方式实现这一切

编辑#1:

  • 您可以使用
  • 对于高度专业化的子组件示例,我建议您查看项目。它涉及到与外部平台(如Facebook和Google)的身份验证,您希望在项目中启用的每个平台都是一个单独的NPM模块
  • 什么使您认为您不能在运行时卸载/重新加载模块?是的,你可以

  • 我还没用过,但建筑师可能符合要求

    Architect是Node.js应用程序的一种简单但功能强大的结构。使用Architect,您可以设置一个简单的配置,并告诉Architect您要加载哪些插件。每个插件都向架构师注册自己,以便其他插件可以使用其功能。插件可以作为NPM包进行维护,这样就可以将它们放到其他架构师应用程序中


    我觉得你们的建筑模块化结构,有很多例子,并没有正确的方法,但这里有一个小例子。此外,我会使所有插件/模块分开的NPM包,这样管理将更容易。你可能想结帐。node.js应用程序的包(自动)加载器,支持NPM或其他包管理器。我可以定义不向所有人发布的NPM模块吗?NPM是否设计用于生成高度专业化的模块,作为某个系统子组件的某个子组件?如果是这样的话,NPM模块可以在运行时被移除/重新加载吗?好的,我会处理它,然后再回来找你!谢谢我不确定我是否明白这个答案。。。想象一下创建20或30个这样的模块。仅仅为这么多模块创建和维护单独的版本控制和npm包最终会带来太多的开销,尤其是对于小模块。不要计算所有的技巧,比如npm链接,以使开发易于管理。肯定有比npm更好的方法吗?请检查-您可以将所有包放在一个repo中并自动链接它们。@Poni“private”链接已断开。