node.js - 在 NodeJS 应用程序中实现插件管理器以在应用程序级别进行动态扩展
问题描述
对于 NodeJS 服务器应用程序,我需要使用类似插件的系统来实现动态可扩展性。目标是能够通过简单的插件挂钩扩展计算,这些插件可以通过它们在主应用程序中注册的事件选择何时以及如何运行。
- 在文件夹“./plugins”中,每个插件都应该位于一个子文件夹中。
- 插件应在启动时由应用程序自动加载。
- 不允许更改应用程序代码以引入新插件。
- 插件应该能够注册主应用程序中的事件。
- 插件之间的通信应该以某种方式成为可能
是否有任何现成的框架可以满足此要求,或者是否有任何坚如磐石的架构方法来满足此要求?
问候
博克森
解决方案
经过一些尝试和错误后找到了解决方案:
- 读取插件目录 (fs) 并扫描子文件夹
- 检查子文件夹内是否有 manifest.json 文件
- 如果 manifest.json 存在,则读取此文件并将内容解析为 JSON 对象
- 将 JSON 对象推入数组(插件列表数组)
- 遍历插件列表数组并需要插件 main.js 文件
- 插件注册插件管理器对象的事件(通过
global.pluginmanager = pluginmanager
通过适当的错误处理,这似乎很有效。
推荐阅读
- swift - 1 个部分和 2 个单元格,但 4 个 indexPath.row
- angular - 带有验证的表单(嵌入式组件)中可重用的嵌套子组件
- angular - 解决来自外部的承诺以推迟程序执行
- mysql - MariaDB 备份工具 Mariabackup 失败并出现错误
- python - Python代码询问你最喜欢的颜色是什么,但有错误
- android - 找不到 com.google.dagger:dagger-compiler:3.0.0
- python - Peewee 和 SQLite 返回不正确的日期格式
- javascript - 重定向时的 Flash 消息 - Express
- python - 我正在使用 python 制作一个计算器,它在计算带括号的表达式时显示错误
- python - Pygame,将精灵保持在边框中,clamp_ip() 将无法正常工作