我目前正在Node.JS上Express处理一个大型应用程序。
我希望能让插件兼容,所以我开始编写自己的小插件系统,其文件结构如下:
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
到目前为止,这么好,但现在事情变得更复杂了(而且它们总是变得更复杂),因为我必须考虑模块初始化的顺序(因为它们可能会将自己附加到处理程序堆栈{{{ 1}},use
,get
等),等等...
由于我对Node和Express还有点新手,我开始怀疑: 可能已经有一个好的引擎可以做到这一切吗?我找不到一个,这让我相信这可能是一个坏主意?也许还有一个更“节点” - 或“表达” - 这种方式可以做我忽略的事情?
感谢您的帮助!
答案 0 :(得分:6)
不要浪费精力重新发明轮子 - 使用名为NPM Modules的现有解决方案:) 你觉得这不是那种方式是对的。
IMO的最佳方法是NodeJs的NPM模块,你可以自己写一些。
至于“get”/“post”/ etc的处理程序绑定执行顺序 - 你仍然可以控制程序包加载顺序,不要忘记,所以你可以用“标准”方式实现它。 / p>
编辑#1:
private
答案 1 :(得分:1)
我没有使用它,但建筑师可能符合账单https://github.com/c9/architect
Architect是Node.js应用程序的一个简单但功能强大的结构。使用Architect,您可以设置一个简单的配置并告诉Architect您要加载哪些插件。每个插件都使用Architect注册,因此其他插件可以使用其功能。插件可以作为NPM包进行维护,因此可以将它们放入其他Architect应用程序中。