feat: 拆分移动游戏项目为独立 z449 子模块(git submodule + i18n prop 桥接)
- mobile-game 模块源码迁出至独立仓库 z449(third_party/z449),独立可渲染/维护 - z449 App.vue 为便携式组件:自带独立 vue-i18n 实例与 locale 文案 - mainPage 侧 MobileGameWrapper 透传 :locale prop,子模块 watch 同步语言 - mainPage i18n 精简:仅保留 tabs.mobileGame,删除 mobileGame.* 大块文案 - 文档:新增 docs/submodule-z449.md,更新 README/architecture/add-module
This commit is contained in:
@@ -97,7 +97,10 @@ export default { id: 'my-project', tabKey: 'tabs.myProject', order: 4, param: 'i
|
||||
|
||||
### 集成独立子项目(git submodule)
|
||||
|
||||
参照 `timetable` 模块:建 mainPage 侧包装器组件 import 子项目 `App.vue`,套 `PageShell`,包装器持有 `defineOptions({ name })`。子项目保持纯净。详见 [submodule-timeTableFix.md](./submodule-timeTableFix.md)。
|
||||
参照 `timetable` 模块(无 i18n 子项目)或 `mobile-game` 模块(带独立 i18n 的子项目):建 mainPage 侧包装器组件 import 子项目 `App.vue`,包装器持有 `defineOptions({ name })`。子项目保持纯净。
|
||||
|
||||
- **无 i18n 的子项目**(如 timeTableFix):包装器直接 import App.vue 即可。
|
||||
- **带独立 i18n 的子项目**(如 z449):子项目 App.vue 接 `:locale` prop,包装器把 mainPage 当前语言透传(`<Z449App :locale="locale" />`),子项目 `watch` 同步到自己的 i18n 实例。详见 [submodule-z449.md](./submodule-z449.md)。
|
||||
|
||||
## 元数据字段速查
|
||||
|
||||
|
||||
@@ -52,8 +52,15 @@ export default {
|
||||
- `keepInclude` 是模块 id 列表,默认包含所有模块。
|
||||
- 声明了 `requiresAlive` 的模块,当存活探测为 `down` 时移出名单 -> 组件卸载;恢复 `up` 后重新纳入。
|
||||
- **匹配约定**:KeepAlive 按组件 `name` 匹配,因此每个模块组件需 `defineOptions({ name: <模块 id> })`。
|
||||
- 内置模块(mobile-game/whiteboard/calendar)直接在组件内声明。
|
||||
- 子模块集成(timetable)由 mainPage 侧包装器 `Timetable.vue` 持有 name,子项目自身不持 name(保持纯净)。
|
||||
- 内置模块(whiteboard/calendar)直接在组件内声明。
|
||||
- 子模块集成(timetable/mobile-game)由 mainPage 侧包装器持有 name,子项目自身不持 name(保持纯净)。
|
||||
|
||||
## 子模块集成(git submodule + 构建期组件)
|
||||
|
||||
部分页签由独立仓库的子项目经 git submodule 集成,mainPage 侧用包装器 import 子项目 `App.vue` 作为路由组件(非 iframe),共享构建与 KeepAlive 缓存:
|
||||
|
||||
- **timeTableFix**(`third_party/timeTableFix`,日程整理页签):无 i18n,子项目硬编码中文。详见 [submodule-timeTableFix.md](./submodule-timeTableFix.md)。
|
||||
- **z449**(`third_party/z449`,移动游戏页签):子项目自带独立 `vue-i18n` 实例与 locale 文案。mainPage 包装器把当前语言经 `:locale` prop 透传,子项目 `App.vue` `watch` 该 prop 同步到自己的 i18n 实例,从而跟随父项目语言开关响应式切换(不共享 messages,仅同步 locale 值)。详见 [submodule-z449.md](./submodule-z449.md)。
|
||||
|
||||
## 存活校验(requiresAlive)
|
||||
|
||||
|
||||
69
docs/submodule-z449.md
Normal file
69
docs/submodule-z449.md
Normal file
@@ -0,0 +1,69 @@
|
||||
# 子项目 z449(git submodule + i18n 桥接)
|
||||
|
||||
z449(移动游戏项目展示页)作为 **git submodule** 被 mainPage 引入,位于 `third_party/z449`,独立仓库为 https://git.zikai.wang/zikai/z449.git 。
|
||||
|
||||
## 集成方式
|
||||
|
||||
mainPage 侧的 `src/modules/mobile-game/MobileGameWrapper.vue` 包装器 import 子模块的 `src/App.vue` 作为组件,并持有 KeepAlive 匹配名 `defineOptions({ name: 'mobile-game' })`。
|
||||
|
||||
- 子模块 `App.vue` 是**便携式组件**:嵌入与独立运行两用。它自带独立 `vue-i18n` 实例与自己的 locale 文案(`mobileGame.*`),不共享 mainPage 的 messages。
|
||||
- **i18n 桥接**:mainPage 把当前语言经 `:locale` prop 透传给子模块的 `App.vue`;后者 `watch` 该 prop,同步到自己的 i18n 实例 `locale`。这样切换语言时,移动游戏页内容跟随父项目响应式切换,文案来自 z449 自有 locale。
|
||||
- 子模块独立运行时不接收 prop,默认中文。
|
||||
- 构建期集成(非 iframe),共享 mainPage 的构建与 KeepAlive 缓存。
|
||||
- 子模块样式已隔离(scoped),全局重置/令牌仅在独立 app 的 `main.js` 加载,嵌入时不加载,复用宿主 `:root` 令牌级联。
|
||||
|
||||
## 克隆(含子模块)
|
||||
|
||||
```bash
|
||||
git clone --recursive https://git.zikai.wang/zikai/zMainPage.git mainPage
|
||||
```
|
||||
|
||||
若已 clone 但未带子模块:
|
||||
|
||||
```bash
|
||||
cd mainPage
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
> 构建前需在子模块目录内 `npm install`(mainPage 的 Vite 编译子模块 `.vue`,但子模块依赖如 `vue-i18n` 须各自安装):
|
||||
|
||||
```bash
|
||||
cd third_party/z449 && npm install
|
||||
```
|
||||
|
||||
## 升级子模块到最新版本
|
||||
|
||||
```bash
|
||||
cd mainPage
|
||||
git submodule update --remote third_party/z449 # 拉取最新
|
||||
cd third_party/z449 && git checkout master # 固定到目标分支/commit
|
||||
cd ../..
|
||||
git add third_party/z449 # 更新 gitlink 指针
|
||||
git commit -m "chore: 升级 z449 子模块"
|
||||
npm run build # 重新构建 mainPage
|
||||
git push # 推送 mainPage(gitlink)
|
||||
```
|
||||
|
||||
> 推送顺序:先确保子模块的 commit 已推到 z449.git,再推 mainPage 的 gitlink,否则别人 clone mainPage 时拉不到子模块对应 commit。
|
||||
|
||||
## 移除子模块集成(仅移除 mainPage 页签,不影响 z449 本身)
|
||||
|
||||
```bash
|
||||
cd mainPage
|
||||
git submodule deinit -f third_party/z449
|
||||
git rm third_party/z449
|
||||
git commit -m "chore: 移除 z449 子模块集成"
|
||||
```
|
||||
|
||||
同时删 `src/modules/mobile-game/` 文件夹即移除页签。z449 独立仓库不受影响。
|
||||
|
||||
> z449 仅作为 submodule 被 mainPage 构建期集成,无独立线上入口。独立开发/测试用其自身的 `npm run dev` / `npm run build`。
|
||||
|
||||
## 与 timeTableFix 子模块的差异
|
||||
|
||||
| 维度 | timeTableFix | z449 |
|
||||
|------|--------------|------|
|
||||
| i18n | 无(硬编码中文) | 自带独立 vue-i18n,中英双语 |
|
||||
| 语言同步 | 无需 | 经 `:locale` prop 桥接父项目语言 |
|
||||
| 文案来源 | 组件内硬编码 | z449 自有 locale 文件(单一来源) |
|
||||
| mainPage 侧文案 | 无 | 仅 `tabs.mobileGame` 页签标题 |
|
||||
Reference in New Issue
Block a user