本文档由 g2rain-appkit 的
# 总体架构
docs/architecture/overview.md 自动同步生成。# 1. 定位与目标
g2rain-appkit 是 G2rain 多个 Vue 应用共享能力的唯一事实来源。仓库使用 npm workspaces 管理可独立发布的包,同时保持各业务应用独立开发、构建和部署。
它解决跨仓库复制带来的缺陷修复不同步、实现分叉、主题不一致和公共能力无法独立演进等问题。
# 2. 系统上下文
flowchart LR
Dev[公共能力开发者] --> Repo[g2rain-appkit]
Repo --> Registry[npm Registry]
Registry --> Template[g2rain-app-template]
Registry --> Apps[业务应用]
Shell[g2rain-main-shell] -->|qiankun 装载| Apps
Shell -->|主题和运行时消息| Apps
# 3. 仓库分层
g2rain-appkit/
├─ packages/
│ ├─ theme/ # 设计变量、主题和基础样式
│ ├─ ui/ # 通用 Vue 组件与组合式函数
│ ├─ http/ # HTTP Client、错误与拦截器
│ └─ platform/ # Main/Sub 协议、生命周期与可选能力
├─ examples/
│ └─ playground/ # 公共包组合验证
└─ docs/ # 架构、开发、发布和迁移文档
# 4. 依赖方向
flowchart BT
Theme["@g2rain/theme"]
UI["@g2rain/ui"]
HTTP["@g2rain/http"]
Runtime["@g2rain/platform"]
App[业务应用]
UI --> Theme
App --> Theme
App --> UI
App --> HTTP
App --> Runtime
约束:
theme位于依赖底层,不依赖 Vue、Pinia 或 qiankun。theme是 CSS-only 包;DOM 主题切换和订阅属于platform/theme。ui以 peer 依赖声明@g2rain/theme,但不能依赖业务应用。http不读取应用环境变量,不持有具体 Token Store。platform定义 Main/Sub 共享协议和装配能力,不包含业务页面、领域 API 或 Main Shell Store。http与platform互不依赖;应用在组合根按需装配两者。platform不强制依赖theme;主题 CSS 由应用显式引入,主题 Controller 可选使用。- 包之间不得形成循环依赖。
目标架构使用 @g2rain/platform 作为“前端应用运行与主子应用协作 SDK”的总称。包根只导出 Main/Sub 共享类型和协议,/sub 提供框架无关的实例生命周期与 Scope,/main 提供协调端口;目标身份模型为 MicroAppDefinition → WorkspaceView → RuntimeInstance → RuntimeAdapter 私有 handle。Main Shell 继续拥有 Workspace、RuntimeStore、实例队列和具体框架 handle,业务应用继续拥有 Vue、Pinia、Router、qiankun lifecycle 和独立启动逻辑。未发布的旧工作包已直接改名为 @g2rain/platform,不保留兼容入口。当前先在 Member 与 Main Shell 完成整体验证,再决定发布;库内实现不构成 npm 发布承诺。详见 Platform 前端应用运行与主子协作方案。
# 5. 运行模式
# 独立模式
业务应用自行加载配置、初始化主题、创建 HTTP Client 和装配运行时能力。
# qiankun 集成模式
主应用是页面级主题和微应用生命周期的所有者。子应用接收主应用下发的主题及公共事件,卸载时只释放自身资源,不修改主应用持有的全局状态。
# 6. 稳定性边界
以下内容属于兼容性承诺:
- 各包
exports暴露的入口。 - 导出的 TypeScript 类型、组件 Props、事件和 Slots。
- CSS 语义变量名称。
- 微应用消息类型和载荷结构。
- HTTP 错误模型及工厂参数。
包内部目录、未导出模块、测试辅助代码和 Playground 实现不属于公开 API。
# 7. 非目标
- 不把所有业务应用合并成一个 Monorepo。
- 不将业务页面、领域 API、具体 Store 或路由放入公共包。
- 不要求所有应用同步升级公共包。
- 不以
npm link作为正式制品验收手段。