generator-mico-cli 0.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +84 -0
  2. package/bin/mico.js +316 -0
  3. package/generators/micro-react/ignore-list.json +8 -0
  4. package/generators/micro-react/index.js +158 -0
  5. package/generators/micro-react/templates/.commitlintrc.js +6 -0
  6. package/generators/micro-react/templates/.cursor/rules/always-read-docs.mdc +129 -0
  7. package/generators/micro-react/templates/.cursor/rules/cicd-deploy.mdc +143 -0
  8. package/generators/micro-react/templates/.cursor/rules/coding-conventions.mdc +206 -0
  9. package/generators/micro-react/templates/.cursor/rules/commit-conventions.mdc +111 -0
  10. package/generators/micro-react/templates/.cursor/rules/development-guide.mdc +295 -0
  11. package/generators/micro-react/templates/.cursor/rules/layout-app.mdc +275 -0
  12. package/generators/micro-react/templates/.cursor/rules/micro-frontend.mdc +196 -0
  13. package/generators/micro-react/templates/.cursor/rules/project-overview.mdc +128 -0
  14. package/generators/micro-react/templates/.cursor/rules/request-auth.mdc +220 -0
  15. package/generators/micro-react/templates/.cursor/rules/theme-system.mdc +206 -0
  16. package/generators/micro-react/templates/.editorconfig +16 -0
  17. package/generators/micro-react/templates/.env +3 -0
  18. package/generators/micro-react/templates/.eslintrc.js +30 -0
  19. package/generators/micro-react/templates/.husky/commit-msg +2 -0
  20. package/generators/micro-react/templates/.husky/pre-commit +2 -0
  21. package/generators/micro-react/templates/.lintstagedrc +5 -0
  22. package/generators/micro-react/templates/.stylelintrc.js +25 -0
  23. package/generators/micro-react/templates/AGENTS.md +39 -0
  24. package/generators/micro-react/templates/CICD/start_dev.sh +30 -0
  25. package/generators/micro-react/templates/CICD/start_local.sh +30 -0
  26. package/generators/micro-react/templates/CICD/start_prod.sh +30 -0
  27. package/generators/micro-react/templates/CICD/start_test.sh +30 -0
  28. package/generators/micro-react/templates/CICD/wangsu_fresh_dev.sh +19 -0
  29. package/generators/micro-react/templates/CICD/wangsu_fresh_prod.sh +19 -0
  30. package/generators/micro-react/templates/CICD/wangsu_fresh_test.sh +19 -0
  31. package/generators/micro-react/templates/CLAUDE.md +106 -0
  32. package/generators/micro-react/templates/README.md +84 -0
  33. package/generators/micro-react/templates/_gitignore +57 -0
  34. package/generators/micro-react/templates/_npmrc +2 -0
  35. package/generators/micro-react/templates/apps/layout/.env +4 -0
  36. package/generators/micro-react/templates/apps/layout/.eslintrc.js +10 -0
  37. package/generators/micro-react/templates/apps/layout/.lintstagedrc +17 -0
  38. package/generators/micro-react/templates/apps/layout/.prettierignore +3 -0
  39. package/generators/micro-react/templates/apps/layout/.prettierrc +8 -0
  40. package/generators/micro-react/templates/apps/layout/.stylelintrc.js +20 -0
  41. package/generators/micro-react/templates/apps/layout/README.md +37 -0
  42. package/generators/micro-react/templates/apps/layout/config/config.dev.ts +54 -0
  43. package/generators/micro-react/templates/apps/layout/config/config.prod.ts +37 -0
  44. package/generators/micro-react/templates/apps/layout/config/config.testing.ts +27 -0
  45. package/generators/micro-react/templates/apps/layout/config/config.ts +132 -0
  46. package/generators/micro-react/templates/apps/layout/config/routes.ts +13 -0
  47. package/generators/micro-react/templates/apps/layout/mock/api.mock.ts +78 -0
  48. package/generators/micro-react/templates/apps/layout/mock/menus.json +100 -0
  49. package/generators/micro-react/templates/apps/layout/mock/menus.ts +11 -0
  50. package/generators/micro-react/templates/apps/layout/mock/user.mock.ts +20 -0
  51. package/generators/micro-react/templates/apps/layout/package.json +45 -0
  52. package/generators/micro-react/templates/apps/layout/public/font/ar-SA.js +54 -0
  53. package/generators/micro-react/templates/apps/layout/public/font/default.js +54 -0
  54. package/generators/micro-react/templates/apps/layout/src/app.tsx +123 -0
  55. package/generators/micro-react/templates/apps/layout/src/assets/.gitkeep +0 -0
  56. package/generators/micro-react/templates/apps/layout/src/common/auth/cs-auth-manager.ts +220 -0
  57. package/generators/micro-react/templates/apps/layout/src/common/auth/index.ts +41 -0
  58. package/generators/micro-react/templates/apps/layout/src/common/auth/tool.ts +3 -0
  59. package/generators/micro-react/templates/apps/layout/src/common/auth/type.ts +6 -0
  60. package/generators/micro-react/templates/apps/layout/src/common/constants.ts +38 -0
  61. package/generators/micro-react/templates/apps/layout/src/common/env.ts +73 -0
  62. package/generators/micro-react/templates/apps/layout/src/common/helpers.ts +69 -0
  63. package/generators/micro-react/templates/apps/layout/src/common/locale.ts +123 -0
  64. package/generators/micro-react/templates/apps/layout/src/common/logger.ts +45 -0
  65. package/generators/micro-react/templates/apps/layout/src/common/menu/index.ts +2 -0
  66. package/generators/micro-react/templates/apps/layout/src/common/menu/parser.ts +143 -0
  67. package/generators/micro-react/templates/apps/layout/src/common/menu/types.ts +92 -0
  68. package/generators/micro-react/templates/apps/layout/src/common/request/config.ts +73 -0
  69. package/generators/micro-react/templates/apps/layout/src/common/request/index.ts +188 -0
  70. package/generators/micro-react/templates/apps/layout/src/common/request/interceptors.ts +186 -0
  71. package/generators/micro-react/templates/apps/layout/src/common/request/sso.ts +132 -0
  72. package/generators/micro-react/templates/apps/layout/src/common/request/token-refresh.ts +136 -0
  73. package/generators/micro-react/templates/apps/layout/src/common/request/types.ts +44 -0
  74. package/generators/micro-react/templates/apps/layout/src/common/request/url-resolver.ts +75 -0
  75. package/generators/micro-react/templates/apps/layout/src/common/theme.ts +107 -0
  76. package/generators/micro-react/templates/apps/layout/src/common/types.ts +7 -0
  77. package/generators/micro-react/templates/apps/layout/src/common/upload/index.ts +2 -0
  78. package/generators/micro-react/templates/apps/layout/src/common/upload/oss.ts +401 -0
  79. package/generators/micro-react/templates/apps/layout/src/common/upload/types.ts +47 -0
  80. package/generators/micro-react/templates/apps/layout/src/common/uploadFiles.ts +35 -0
  81. package/generators/micro-react/templates/apps/layout/src/components/IconFont/index.tsx +25 -0
  82. package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.less +44 -0
  83. package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.tsx +121 -0
  84. package/generators/micro-react/templates/apps/layout/src/constants/index.ts +15 -0
  85. package/generators/micro-react/templates/apps/layout/src/global.less +13 -0
  86. package/generators/micro-react/templates/apps/layout/src/hooks/index.ts +3 -0
  87. package/generators/micro-react/templates/apps/layout/src/hooks/useAuth.ts +75 -0
  88. package/generators/micro-react/templates/apps/layout/src/hooks/useMenu.ts +35 -0
  89. package/generators/micro-react/templates/apps/layout/src/hooks/useMenuState.ts +112 -0
  90. package/generators/micro-react/templates/apps/layout/src/hooks/useTheme.ts +124 -0
  91. package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.less +109 -0
  92. package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.tsx +97 -0
  93. package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.less +164 -0
  94. package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.tsx +165 -0
  95. package/generators/micro-react/templates/apps/layout/src/layouts/index.less +71 -0
  96. package/generators/micro-react/templates/apps/layout/src/layouts/index.tsx +91 -0
  97. package/generators/micro-react/templates/apps/layout/src/locales/en-US.ts +20 -0
  98. package/generators/micro-react/templates/apps/layout/src/locales/zh-CN.ts +19 -0
  99. package/generators/micro-react/templates/apps/layout/src/models/global.ts +13 -0
  100. package/generators/micro-react/templates/apps/layout/src/pages/Home/index.less +3 -0
  101. package/generators/micro-react/templates/apps/layout/src/pages/Home/index.tsx +7 -0
  102. package/generators/micro-react/templates/apps/layout/src/requestErrorConfig.ts +171 -0
  103. package/generators/micro-react/templates/apps/layout/src/services/auth.ts +37 -0
  104. package/generators/micro-react/templates/apps/layout/src/services/oss.ts +40 -0
  105. package/generators/micro-react/templates/apps/layout/src/styles/arco-override.less +78 -0
  106. package/generators/micro-react/templates/apps/layout/src/styles/themes/dark/custom-var.less +244 -0
  107. package/generators/micro-react/templates/apps/layout/src/styles/themes/normal/custom-var.less +195 -0
  108. package/generators/micro-react/templates/apps/layout/src/styles/variables.less +5 -0
  109. package/generators/micro-react/templates/apps/layout/src/utils/format.ts +4 -0
  110. package/generators/micro-react/templates/apps/layout/tailwind.config.js +7 -0
  111. package/generators/micro-react/templates/apps/layout/tailwind.css +3 -0
  112. package/generators/micro-react/templates/apps/layout/tsconfig.json +3 -0
  113. package/generators/micro-react/templates/apps/layout/typings.d.ts +1 -0
  114. package/generators/micro-react/templates/deployDesc.md +60 -0
  115. package/generators/micro-react/templates/docs/commit-message.md +98 -0
  116. package/generators/micro-react/templates/package.json +35 -0
  117. package/generators/micro-react/templates/packages/shared-styles/README.md +125 -0
  118. package/generators/micro-react/templates/packages/shared-styles/arco-override.less +78 -0
  119. package/generators/micro-react/templates/packages/shared-styles/index.less +14 -0
  120. package/generators/micro-react/templates/packages/shared-styles/package.json +27 -0
  121. package/generators/micro-react/templates/packages/shared-styles/theme-inject.less +10 -0
  122. package/generators/micro-react/templates/packages/shared-styles/themes/dark/custom-var.less +246 -0
  123. package/generators/micro-react/templates/packages/shared-styles/themes/normal/custom-var.less +195 -0
  124. package/generators/micro-react/templates/packages/shared-styles/variables-only.less +301 -0
  125. package/generators/micro-react/templates/packages/shared-styles/variables.less +363 -0
  126. package/generators/micro-react/templates/pnpm-workspace.yaml +9 -0
  127. package/generators/micro-react/templates/scripts/collect-dist.js +68 -0
  128. package/generators/micro-react/templates/scripts/create-umi-app.sh +61 -0
  129. package/generators/micro-react/templates/scripts/dev.js +133 -0
  130. package/generators/micro-react/templates/turbo.json +68 -0
  131. package/generators/subapp-react/ignore-list.json +7 -0
  132. package/generators/subapp-react/index.js +189 -0
  133. package/generators/subapp-react/templates/homepage/.env +4 -0
  134. package/generators/subapp-react/templates/homepage/README.md +116 -0
  135. package/generators/subapp-react/templates/homepage/_gitignore +9 -0
  136. package/generators/subapp-react/templates/homepage/config/config.dev.ts +59 -0
  137. package/generators/subapp-react/templates/homepage/config/config.prod.ts +41 -0
  138. package/generators/subapp-react/templates/homepage/config/config.testing.ts +40 -0
  139. package/generators/subapp-react/templates/homepage/config/config.ts +102 -0
  140. package/generators/subapp-react/templates/homepage/config/routes.ts +7 -0
  141. package/generators/subapp-react/templates/homepage/mock/api.mock.ts +59 -0
  142. package/generators/subapp-react/templates/homepage/package.json +30 -0
  143. package/generators/subapp-react/templates/homepage/src/app.tsx +80 -0
  144. package/generators/subapp-react/templates/homepage/src/assets/yay.jpg +0 -0
  145. package/generators/subapp-react/templates/homepage/src/common/logger.ts +42 -0
  146. package/generators/subapp-react/templates/homepage/src/common/mainApp.ts +53 -0
  147. package/generators/subapp-react/templates/homepage/src/common/request.ts +49 -0
  148. package/generators/subapp-react/templates/homepage/src/global.less +26 -0
  149. package/generators/subapp-react/templates/homepage/src/pages/index.less +139 -0
  150. package/generators/subapp-react/templates/homepage/src/pages/index.tsx +342 -0
  151. package/generators/subapp-react/templates/homepage/src/styles/theme.less +6 -0
  152. package/generators/subapp-react/templates/homepage/tsconfig.json +3 -0
  153. package/generators/subapp-react/templates/homepage/typings.d.ts +17 -0
  154. package/lib/utils.js +165 -0
  155. package/package.json +31 -0
@@ -0,0 +1,295 @@
1
+ ---
2
+ description: 开发指南 - 环境配置、常用命令、调试技巧
3
+ globs: []
4
+ ---
5
+
6
+ # 开发指南
7
+
8
+ ## 环境要求
9
+
10
+ - **Node.js**: ≥ 18
11
+ - **pnpm**: 10.18.2(推荐使用 corepack)
12
+
13
+ ```bash
14
+ # 启用 corepack 并安装指定版本 pnpm
15
+ corepack prepare pnpm@10.18.2 --activate
16
+ ```
17
+
18
+ ## 项目初始化
19
+
20
+ ```bash
21
+ # 克隆项目
22
+ git clone <repo-url>
23
+ cd <%= projectName %>
24
+
25
+ # 安装依赖
26
+ pnpm install
27
+ ```
28
+
29
+ ## 开发命令
30
+
31
+ ### 启动开发服务器
32
+
33
+ ```bash
34
+ # 交互式选择应用
35
+ pnpm dev
36
+
37
+ # 直接启动指定应用
38
+ pnpm -C apps/layout dev
39
+
40
+ # 启动 layout 应用(不使用 mock)
41
+ pnpm -C apps/layout start:development:no-mock
42
+
43
+ # 使用测试环境配置
44
+ pnpm -C apps/layout start:testing
45
+ ```
46
+
47
+ ### 构建命令
48
+
49
+ ```bash
50
+ # 生产环境构建(默认)
51
+ pnpm build
52
+
53
+ # 开发环境构建
54
+ pnpm build:development
55
+
56
+ # 测试环境构建
57
+ pnpm build:testing
58
+
59
+ # 生产环境构建
60
+ pnpm build:production
61
+
62
+ # 本地构建(不包含环境变量)
63
+ pnpm build:local
64
+ ```
65
+
66
+ ### 代码检查
67
+
68
+ ```bash
69
+ # 运行 lint
70
+ pnpm lint
71
+
72
+ # 自动修复
73
+ pnpm lint:fix
74
+ ```
75
+
76
+ ### 创建新应用
77
+
78
+ ```bash
79
+ # 在 apps/ 下创建新的 Umi 应用
80
+ pnpm create:umi-app <app-name>
81
+ ```
82
+
83
+ ## 环境变量配置
84
+
85
+ ### 文件优先级
86
+ ```
87
+ .env # 基础配置
88
+ .env.local # 本地覆盖(不提交)
89
+ .env.development # 开发环境
90
+ .env.development.local
91
+ .env.testing # 测试环境
92
+ .env.testing.local
93
+ .env.production # 生产环境
94
+ .env.production.local
95
+ ```
96
+
97
+ ### 常用变量
98
+ ```bash
99
+ # API 基础地址
100
+ API_BASE_URL=https://api.example.com
101
+
102
+ # 代理路径
103
+ PROXY_SUFFIX=/api
104
+
105
+ # 应用 ID
106
+ APP_ID=<%= projectName %>
107
+
108
+ # CDN 公共路径
109
+ CDN_PUBLIC_PATH=/dist/
110
+
111
+ # SSO 配置
112
+ LOGIN_ENDPOINT=/auth/login
113
+ REFRESH_ENDPOINT=/auth/refresh
114
+ EXTERNAL_LOGIN_PATH=https://sso.example.com/login
115
+ ```
116
+
117
+ ## 目录约定
118
+
119
+ ### 新建页面
120
+ ```
121
+ src/pages/
122
+ ├── MyPage/
123
+ │ ├── index.tsx # 页面组件
124
+ │ ├── index.less # 页面样式
125
+ │ └── components/ # 页面私有组件
126
+ │ └── List.tsx
127
+ ```
128
+
129
+ ### 新建组件
130
+ ```
131
+ src/components/
132
+ ├── MyComponent/
133
+ │ ├── index.tsx # 组件入口
134
+ │ ├── index.less # 组件样式
135
+ │ └── types.ts # 类型定义(可选)
136
+ ```
137
+
138
+ ### 新建 Hook
139
+ ```
140
+ src/hooks/
141
+ ├── useMyHook.ts # Hook 实现
142
+ └── index.ts # 统一导出
143
+ ```
144
+
145
+ ### 新建服务
146
+ ```
147
+ src/services/
148
+ ├── user.ts # 用户相关 API
149
+ └── auth.ts # 认证相关 API
150
+ ```
151
+
152
+ ## 调试技巧
153
+
154
+ ### 查看微应用加载日志
155
+ ```javascript
156
+ // 在浏览器控制台过滤
157
+ [MicroAppLoader]
158
+ [Layout]
159
+ ```
160
+
161
+ ### 查看请求日志
162
+ ```javascript
163
+ // 在 src/common/request/index.ts 中添加
164
+ addRequestInterceptor(async (ctx) => {
165
+ console.log('[Request]', ctx.url, ctx.options);
166
+ return ctx;
167
+ });
168
+ ```
169
+
170
+ ### 主题调试
171
+ ```javascript
172
+ // 在控制台切换主题
173
+ document.body.setAttribute('arco-theme', 'dark');
174
+ document.body.setAttribute('data-theme', 'dark');
175
+ ```
176
+
177
+ ## Mock 数据
178
+
179
+ ### 文件位置
180
+ ```
181
+ apps/layout/mock/
182
+ ├── menus.json # 菜单数据
183
+ ├── menus.ts # 菜单数据处理
184
+ └── user.mock.ts # 用户相关 Mock API
185
+ ```
186
+
187
+ ### Mock 文件命名
188
+ - `*.mock.ts` - Mock API 文件
189
+ - `_mock.ts` - 页面级 Mock 文件
190
+
191
+ ### 禁用 Mock
192
+ ```bash
193
+ # 启动时禁用 mock
194
+ pnpm -C apps/layout start:development:no-mock
195
+ ```
196
+
197
+ ## Umi 配置
198
+
199
+ ### 路由配置
200
+ ```typescript
201
+ // config/routes.ts
202
+ export default [
203
+ {
204
+ path: '/',
205
+ component: '@/layouts/index',
206
+ routes: [
207
+ { path: '/', component: '@/pages/Home' },
208
+ ],
209
+ },
210
+ ];
211
+ ```
212
+
213
+ ### 环境配置覆盖
214
+ ```typescript
215
+ // config/config.dev.ts
216
+ export default {
217
+ define: {
218
+ 'process.env.API_BASE': 'http://localhost:3000',
219
+ },
220
+ };
221
+ ```
222
+
223
+ ## 常见问题
224
+
225
+ ### 1. 依赖安装失败
226
+ ```bash
227
+ # 清除缓存重新安装
228
+ pnpm store prune
229
+ rm -rf node_modules
230
+ pnpm install
231
+ ```
232
+
233
+ ### 2. TypeScript 类型报错
234
+ ```bash
235
+ # 重新生成类型
236
+ pnpm -C apps/layout setup
237
+ ```
238
+
239
+ ### 3. 样式不生效
240
+ - 检查 Less 文件是否导入
241
+ - 检查类名是否正确
242
+ - 检查主题变量是否使用正确
243
+
244
+ ### 4. 微应用加载失败
245
+ - 检查子应用是否启动
246
+ - 检查 CORS 配置
247
+ - 检查 entry URL 是否正确
248
+ - 查看控制台 `[MicroAppLoader]` 日志
249
+
250
+ ## CI/CD 构建
251
+
252
+ ### Jenkins 构建流程
253
+
254
+ Jenkins 根据不同环境执行 `CICD/` 目录下的脚本:
255
+
256
+ | 环境 | 脚本 | 构建命令 |
257
+ |------|------|---------|
258
+ | 开发 | `CICD/start_dev.sh` | `build:development` |
259
+ | 测试 | `CICD/start_test.sh` | `build:testing` |
260
+ | 生产 | `CICD/start_prod.sh` | `build:production` |
261
+ | 本地 | `CICD/start_local.sh` | `build:local` |
262
+
263
+ ### 本地模拟构建
264
+
265
+ ```bash
266
+ # 模拟测试环境构建
267
+ sh CICD/start_test.sh
268
+
269
+ # 模拟生产环境构建
270
+ sh CICD/start_prod.sh
271
+ ```
272
+
273
+ ### CDN 路径
274
+
275
+ 构建产物上传到 CDN:
276
+ ```
277
+ cdn-portal[-env].micoplatform.com/<%= projectName %>/{version}/dist/{app}/
278
+ ```
279
+
280
+ - `version`:`package.json` 的 version 字段
281
+ - `app`:`apps/` 目录下的应用名(layout、homepage 等)
282
+
283
+ ### 分支策略
284
+
285
+ | 分支 | 环境 |
286
+ |------|------|
287
+ | `test` | 测试环境 |
288
+ | `main` | 生产环境 |
289
+
290
+ ## 相关链接
291
+
292
+ - [UmiJS 文档](https://umijs.org/)
293
+ - [Arco Design](https://arco.design/)
294
+ - [qiankun 文档](https://qiankun.umijs.org/)
295
+ - [Turborepo 文档](https://turbo.build/repo)
@@ -0,0 +1,275 @@
1
+ ---
2
+ description: Layout 主应用详解 - 布局组件、菜单系统、路由管理
3
+ globs: ["apps/layout/**"]
4
+ ---
5
+
6
+ # Layout 主应用
7
+
8
+ ## 应用角色
9
+
10
+ Layout 是 qiankun 微前端架构的**主应用**,负责:
11
+ - 提供整体布局框架(Header + Menu + Content)
12
+ - 管理菜单导航和路由
13
+ - 处理认证和授权
14
+ - 加载和管理微前端子应用
15
+ - 提供主题切换功能
16
+ - 共享 request 实例给子应用
17
+
18
+ ## 目录结构
19
+
20
+ ```
21
+ apps/layout/
22
+ ├── config/ # Umi 配置
23
+ │ ├── config.ts # 主配置
24
+ │ ├── config.dev.ts # 开发环境覆盖
25
+ │ ├── config.testing.ts # 测试环境覆盖
26
+ │ ├── config.prod.ts # 生产环境覆盖
27
+ │ └── routes.ts # 静态路由配置
28
+ ├── docs/ # 功能文档
29
+ ├── mock/ # Mock 数据
30
+ ├── public/ # 静态资源
31
+ └── src/
32
+ ├── app.tsx # Umi 运行时配置
33
+ ├── global.less # 全局样式
34
+ ├── layouts/ # 布局组件
35
+ │ ├── index.tsx # 主布局
36
+ │ ├── index.less
37
+ │ └── components/
38
+ │ ├── header/ # 顶部导航
39
+ │ └── menu/ # 侧边菜单
40
+ ├── pages/ # 路由页面
41
+ │ └── Home/
42
+ ├── components/ # 公共组件
43
+ │ ├── MicroAppLoader/ # 微应用加载器
44
+ │ └── IconFont/ # 图标组件
45
+ ├── common/ # 工具模块
46
+ │ ├── auth/ # 认证模块
47
+ │ ├── request/ # 请求封装
48
+ │ ├── menu/ # 菜单解析
49
+ │ ├── upload/ # 上传模块
50
+ │ └── theme.ts # 主题初始化
51
+ ├── hooks/ # 自定义 Hooks
52
+ ├── services/ # API 服务
53
+ ├── models/ # Umi Model
54
+ ├── locales/ # 国际化
55
+ └── styles/ # 主题样式
56
+ ├── themes/ # 主题变量
57
+ ├── variables.less # Less 变量
58
+ └── arco-override.less # Arco 覆盖
59
+ ```
60
+
61
+ ## 核心模块
62
+
63
+ ### 1. 布局组件 (layouts/index.tsx)
64
+
65
+ ```tsx
66
+ const BasicLayout: React.FC = () => {
67
+ const location = useLocation();
68
+
69
+ // 解析路由配置
70
+ const routes = useMemo(() => {
71
+ const menus = getWindowMenus();
72
+ return extractRoutes(menus);
73
+ }, []);
74
+
75
+ // 查找当前路由配置
76
+ const currentRoute = useMemo(() => {
77
+ return findRouteByPath(routes, location.pathname);
78
+ }, [routes, location.pathname]);
79
+
80
+ // 渲染页面内容
81
+ const renderContent = () => {
82
+ // 微应用类型使用 MicroAppLoader
83
+ if (currentRoute?.loadType === 'microapp' && currentRoute.entry) {
84
+ return <MicroAppLoader entry={currentRoute.entry} name={currentRoute.path} />;
85
+ }
86
+ // 内部路由使用 Outlet
87
+ return <Outlet />;
88
+ };
89
+
90
+ return (
91
+ <Layout className="layout-container">
92
+ <LayoutHeader />
93
+ <Layout className="layout-content">
94
+ <LayoutMenu />
95
+ <Layout className="layout-content-right">
96
+ <Content>{renderContent()}</Content>
97
+ </Layout>
98
+ </Layout>
99
+ </Layout>
100
+ );
101
+ };
102
+ ```
103
+
104
+ ### 2. 菜单系统 (common/menu/)
105
+
106
+ ```typescript
107
+ // 获取菜单数据
108
+ const menus = getWindowMenus();
109
+
110
+ // 提取路由配置
111
+ const routes = extractRoutes(menus);
112
+
113
+ // 解析菜单项
114
+ const menuItems = parseMenuItems(menus);
115
+
116
+ // 查找当前路由
117
+ const currentRoute = findRouteByPath(routes, pathname);
118
+ ```
119
+
120
+ ### 3. 动态路由 (app.tsx)
121
+
122
+ ```typescript
123
+ export function patchClientRoutes({ routes }: { routes: any[] }) {
124
+ const menus = getWindowMenus();
125
+ const dynamicRoutes = extractRoutes(menus);
126
+
127
+ const rootRoute = routes.find((r) => r.path === '/');
128
+ dynamicRoutes.forEach((route) => {
129
+ rootRoute.routes.push({
130
+ path: route.path,
131
+ name: route.name,
132
+ meta: {
133
+ loadType: route.loadType,
134
+ htmlUrl: route.htmlUrl,
135
+ jsUrls: route.jsUrls,
136
+ cssUrls: route.cssUrls,
137
+ },
138
+ });
139
+ });
140
+ }
141
+ ```
142
+
143
+ ### 4. 认证初始化 (app.tsx)
144
+
145
+ ```typescript
146
+ export async function getInitialState() {
147
+ const authInfo = getAuthInfo();
148
+ return {
149
+ currentUser: {
150
+ name: authInfo.nickname,
151
+ avatar: authInfo.avatar,
152
+ userid: authInfo.uid,
153
+ },
154
+ };
155
+ }
156
+ ```
157
+
158
+ ## Umi 配置要点
159
+
160
+ ### config/config.ts
161
+ ```typescript
162
+ export default defineConfig({
163
+ // 挂载元素
164
+ mountElementId: '<%= projectName %>',
165
+
166
+ // 禁用内置 layout,使用自定义布局
167
+ layout: false,
168
+
169
+ // 国际化
170
+ locale: {
171
+ default: 'zh-CN',
172
+ antd: false,
173
+ },
174
+
175
+ // qiankun 主应用配置
176
+ qiankun: {
177
+ master: {
178
+ apps: [], // 子应用在运行时动态注册
179
+ },
180
+ },
181
+
182
+ // Tailwind CSS
183
+ tailwindcss: {},
184
+ });
185
+ ```
186
+
187
+ ## 常用 Hooks
188
+
189
+ ### useTheme
190
+ ```typescript
191
+ const { theme, isDark, toggleTheme, setTheme } = useTheme();
192
+ ```
193
+
194
+ ### useMenu
195
+ ```typescript
196
+ const { menuItems, selectedKey, openKeys } = useMenu();
197
+ ```
198
+
199
+ ### useAuth
200
+ ```typescript
201
+ const { isAuthenticated, user, logout } = useAuth();
202
+ ```
203
+
204
+ ## 样式系统
205
+
206
+ ### 主题变量引入
207
+ ```less
208
+ // 在组件样式中使用
209
+ @import '@/styles/variables.less';
210
+
211
+ .my-component {
212
+ background: @color-fill-1;
213
+ color: @color-text-2;
214
+ }
215
+ ```
216
+
217
+ ### Tailwind CSS 使用
218
+ ```tsx
219
+ <div className="flex items-center gap-4 p-4">
220
+ <span className="text-gray-600">标题</span>
221
+ </div>
222
+ ```
223
+
224
+ ## 国际化
225
+
226
+ ### 定义翻译
227
+ ```typescript
228
+ // locales/zh-CN.ts
229
+ export default {
230
+ 'menu.home': '首页',
231
+ 'menu.settings': '设置',
232
+ };
233
+
234
+ // locales/en-US.ts
235
+ export default {
236
+ 'menu.home': 'Home',
237
+ 'menu.settings': 'Settings',
238
+ };
239
+ ```
240
+
241
+ ### 使用翻译
242
+ ```tsx
243
+ import { useIntl } from '@umijs/max';
244
+
245
+ const { formatMessage } = useIntl();
246
+ const title = formatMessage({ id: 'menu.home' });
247
+ ```
248
+
249
+ ## Model 状态管理
250
+
251
+ ```typescript
252
+ // models/global.ts
253
+ export default {
254
+ namespace: 'global',
255
+ state: {
256
+ collapsed: false,
257
+ },
258
+ reducers: {
259
+ toggleCollapsed(state) {
260
+ return { ...state, collapsed: !state.collapsed };
261
+ },
262
+ },
263
+ };
264
+
265
+ // 使用
266
+ const { collapsed } = useModel('global');
267
+ ```
268
+
269
+ ## 注意事项
270
+
271
+ 1. **菜单数据来源**: 通过 `window.__MICO_MENUS__` 注入
272
+ 2. **路由动态生成**: 在 `patchClientRoutes` 中根据菜单生成路由
273
+ 3. **微应用判断**: 根据 `htmlUrl` 或 `jsUrls` 判断是否为微应用
274
+ 4. **主题初始化**: 在 `app.tsx` 中调用 `initTheme()` 避免闪烁
275
+ 5. **认证共享**: 子应用使用主应用传递的 `request` 实例