JAR 插件路由协议(mms-ui)
约定 后端 plugin.json 中 frontend 块与 管理端前端 的协作方式,便于后续「插件市场」与 后端控制路由(getMenu)并存。
白话一句
后端在 JAR 里写好 frontend(包名、路由前缀等),宿主会把 manifest 通过 /system/pluginHost/manifests 交给前端;前端用来提示兼容性、展示市场卡片,真正进菜单仍要配 sys_function(权限体系不变)。
阅读顺序(新手)
本文假设你已经能用宿主加载 JAR 并理解 plugin.json。若还没有:请先 JAR 开发指南 · 第 0 节 跑通示例,再读 JAR 插件入门;不要 第一轮就同时啃 frontend 与路由约定。
1. 后端元数据(已有字段)
摘自契约(见主仓 mms-plugin-api 内 META-INF/mms/plugin.example.json)。
{
"frontend": {
"modulePackage": "@scope/plugin-ui",
"compatibleMmsUi": "语义化版本或文案",
"routePrefixes": ["/comments"]
}
}{
"id": "com.example.mms.comments",
"version": "1.0.0",
"name": "评论插件",
"description": "演示 frontend 块",
"requiresMms": {
"revisionMin": 21,
"revisionMax": 21,
"springBoot": "3.5.8"
},
"entryClass": "com.example.mms.comments.CommentsPlugin",
"kind": "extension",
"frontend": {
"modulePackage": "@example/mms-comments-ui",
"compatibleMmsUi": "1.x",
"routePrefixes": ["/comments"]
}
}| 字段 | 含义 |
|---|---|
modulePackage | 前端 NPM 包名或联邦模块逻辑名,宿主只做展示与校验提示 |
compatibleMmsUi | 与当前 mms-ui 兼容声明,UI 可做版本提示 |
routePrefixes | 路由 path 前缀,不得与核心 /system/* 冲突 |
2. 与 mms-ui 后端动态路由的关系
当前菜单来自 GET common/getMenu,组件路径为 views/... 字符串。插件前端有两种集成级别:
| 级别 | 做法 | 适用 |
|---|---|---|
| A. 宿主内嵌页面 | 在 mms-ui 增加 views/system/pluginMarket/* 等,仅占位运维;插件业务页仍进主仓库 | 当前已采用 |
| B. 远程/联邦模块 | vite-plugin-federation 或 iframe;routePrefixes 注册为子路由,component 指向远程入口 | 规划中 |
| C. 菜单下发扩展字段 | sys_function 或单独 API 增加 pluginId/remoteEntry;backEnd.ts 解析后映射 component | 规划中,需后端配合 |
3. HTTP 聚合(已实现)
GET /system/pluginHost/manifests(super_admin):返回已加载插件的 manifest(与 plugin.json 对齐,含 id / version / name / description / kind / frontend)。供市场页与路由提示使用;不代替权限,仍走 sys_function + 角色。 菜单一键入库:主仓 mms/script/db/increment_20260331_plugin_market_menu.sql(仅 super_admin 角色菜单 + 绑定 role_id='1')。
4. 市场 UI(实现状态)
主仓 mms-ui 提供 views/system/pluginMarket/index.vue(超级管理员):展示 status / health / manifests、上传安装 JAR。亦可执行增量 SQL 写入 sys_function(见上文)替代手工配菜单。
