安装与升级
2026/10/26大约 1 分钟
安装、升级与卸载
基座的 PluginManager 负责插件状态流转,PluginManifestService 负责清单解析与兼容性判定。
安装
- 扫描
plugin/{name}/manifest.json,校验标识合法性(格式 / 最小长度 / 保留名 / 唯一)。 - 用
versionGte(当前基座版本, support_version)判兼容;不兼容则中止。 - 触发
beforeInstall→ 执行install.sql(建表)→afterInstall。 syncEntry同步管理入口安全网菜单;依赖校验(dependencies)确保所依赖插件已装。
启用 / 禁用
- 启用:
beforeEnable→ 状态置为启用 →afterEnable;boot()在下个/当前各 worker 生效。 - 禁用:
beforeDisable→ 事务提交后调用shutdown→ 各 Registry 按owner清理(forgetByOwner)→afterDisable。
升级
- 以
version比对:新版本高于已装版本才走beforeUpgrade→ 迁移 →afterUpgrade。 - 降级限制:默认不允许直接降级安装低版本,避免结构回退引发数据问题。
- 升级注意事项:
install.sql需幂等(CREATE TABLE IF NOT EXISTS等);字段变更应在升级钩子内做数据迁移,而非覆盖式建表。
卸载
beforeUninstall。DatabaseService::deletePluginDatabaseInfo按app_name物理删除插件登记的菜单/权限/配置组;插件自有表按{name}_前缀清理。destroy清理插件自有数据;removePluginFiles删除文件(在此之前shutdown仍可访问插件目录)。
声明式注册与 app_name
菜单、按钮权限、配置 Schema 都携带 app_name = 插件名:
- 同名配置组按
app_name隔离,不同插件互不覆盖。 - 卸载按
app_name物理清理,做到"声明即归属、卸载即回收"。
幂等
PluginRegistrar 的三个方法(menu/permission/configSchema)都是幂等的:命中相同 code/slug 则同步字段、无变化则跳过,可安全放在 boot() 或安装/启用钩子里重复调用。
