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,68 @@
1
+ {
2
+ "$schema": "https://turbo.build/schema.json",
3
+ "globalEnv": ["CDN_PUBLIC_PATH"],
4
+ "tasks": {
5
+ "build": {
6
+ "dependsOn": ["^build"],
7
+ "inputs": [
8
+ "$TURBO_DEFAULT$",
9
+ ".env",
10
+ ".env.local",
11
+ ".env.production",
12
+ ".env.production.local"
13
+ ],
14
+ "outputs": ["dist/**"]
15
+ },
16
+ "build:development": {
17
+ "dependsOn": ["^build:development"],
18
+ "inputs": [
19
+ "$TURBO_DEFAULT$",
20
+ ".env",
21
+ ".env.local",
22
+ ".env.development",
23
+ ".env.development.local"
24
+ ],
25
+ "outputs": ["dist/**"]
26
+ },
27
+ "build:testing": {
28
+ "dependsOn": ["^build:testing"],
29
+ "inputs": [
30
+ "$TURBO_DEFAULT$",
31
+ ".env",
32
+ ".env.local",
33
+ ".env.testing",
34
+ ".env.testing.local"
35
+ ],
36
+ "outputs": ["dist/**"]
37
+ },
38
+ "build:production": {
39
+ "dependsOn": ["^build:production"],
40
+ "inputs": [
41
+ "$TURBO_DEFAULT$",
42
+ ".env",
43
+ ".env.local",
44
+ ".env.production",
45
+ ".env.production.local"
46
+ ],
47
+ "outputs": ["dist/**"]
48
+ },
49
+ "build:local": {
50
+ "dependsOn": ["^build:local"],
51
+ "inputs": ["$TURBO_DEFAULT$", ".env", ".env.local"],
52
+ "outputs": ["dist/**"]
53
+ },
54
+ "dev": {
55
+ "cache": false,
56
+ "persistent": true
57
+ },
58
+ "lint": {
59
+ "outputs": []
60
+ },
61
+ "lint:fix": {
62
+ "outputs": []
63
+ },
64
+ "test": {
65
+ "outputs": []
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,7 @@
1
+ [
2
+ "node_modules",
3
+ "dist",
4
+ ".umi",
5
+ ".umi-production",
6
+ ".turbo"
7
+ ]
@@ -0,0 +1,189 @@
1
+ 'use strict';
2
+
3
+ const Generator = require('yeoman-generator');
4
+ const fs = require('node:fs');
5
+ const path = require('node:path');
6
+ const {
7
+ toKebab,
8
+ toPascal,
9
+ collectFiles,
10
+ transformDestPath,
11
+ isTemplateFile,
12
+ setupErrorHandlers
13
+ } = require('../../lib/utils');
14
+
15
+ const IGNORE_LIST = require('./ignore-list.json');
16
+
17
+ // 安装全局错误处理
18
+ setupErrorHandlers();
19
+
20
+ module.exports = class extends Generator {
21
+ initializing() {
22
+ this.monorepoRoot = process.cwd();
23
+ const appsDir = path.join(this.monorepoRoot, 'apps');
24
+ const workspaceFile = path.join(this.monorepoRoot, 'pnpm-workspace.yaml');
25
+
26
+ if (!fs.existsSync(appsDir)) {
27
+ console.error('');
28
+ console.error('❌ Error: apps directory not found.');
29
+ console.error('');
30
+ console.error(' This generator must be run from a monorepo root that contains an "apps" directory.');
31
+ console.error(` Current directory: ${this.monorepoRoot}`);
32
+ console.error('');
33
+ console.error(' Usage:');
34
+ console.error(' cd /path/to/your-monorepo');
35
+ console.error(' mico create subapp-react');
36
+ console.error('');
37
+ process.exit(1);
38
+ }
39
+
40
+ if (!fs.existsSync(workspaceFile)) {
41
+ console.warn('');
42
+ console.warn('⚠️ Warning: pnpm-workspace.yaml not found.');
43
+ console.warn(' Make sure you are in the correct monorepo.');
44
+ console.warn('');
45
+ }
46
+ }
47
+
48
+ _detectPackageScope() {
49
+ // 尝试从 packages/shared-styles/package.json 读取
50
+ const sharedStylesPath = path.join(this.monorepoRoot, 'packages/shared-styles/package.json');
51
+ if (fs.existsSync(sharedStylesPath)) {
52
+ try {
53
+ const pkg = JSON.parse(fs.readFileSync(sharedStylesPath, 'utf-8'));
54
+ if (pkg.name && pkg.name.startsWith('@')) {
55
+ const match = pkg.name.match(/^(@[^/]+)\//);
56
+ if (match) return match[1];
57
+ }
58
+ } catch (e) {
59
+ // 忽略解析错误
60
+ }
61
+ }
62
+
63
+ // 尝试从根 package.json 读取
64
+ const rootPkgPath = path.join(this.monorepoRoot, 'package.json');
65
+ if (fs.existsSync(rootPkgPath)) {
66
+ try {
67
+ const pkg = JSON.parse(fs.readFileSync(rootPkgPath, 'utf-8'));
68
+ if (pkg.name) {
69
+ return `@${pkg.name}`;
70
+ }
71
+ } catch (e) {
72
+ // 忽略解析错误
73
+ }
74
+ }
75
+
76
+ return null;
77
+ }
78
+
79
+ async prompting() {
80
+ try {
81
+ if (!this.monorepoRoot) {
82
+ console.error('');
83
+ console.error('❌ Error: Internal error - monorepoRoot not initialized.');
84
+ console.error('');
85
+ process.exit(1);
86
+ }
87
+
88
+ const detectedScope = this._detectPackageScope();
89
+
90
+ this.answers = await this.prompt([
91
+ {
92
+ type: 'input',
93
+ name: 'appName',
94
+ message: 'Sub app name',
95
+ default: 'subapp',
96
+ filter: (input) => toKebab(input),
97
+ validate: (input) => {
98
+ const value = toKebab(input);
99
+ if (!value) return 'App name is required';
100
+ const destDir = path.join(this.monorepoRoot, 'apps', value);
101
+ if (fs.existsSync(destDir)) {
102
+ return `Target already exists: apps/${value}`;
103
+ }
104
+ return true;
105
+ }
106
+ },
107
+ {
108
+ type: 'input',
109
+ name: 'packageScope',
110
+ message: 'Package scope',
111
+ default: detectedScope || '@my-project',
112
+ validate: (input) => {
113
+ if (!input) return 'Package scope is required';
114
+ if (!input.startsWith('@')) return 'Package scope must start with @';
115
+ return true;
116
+ }
117
+ }
118
+ ]);
119
+
120
+ this.appName = toKebab(this.answers.appName);
121
+ this.appNamePascal = toPascal(this.appName);
122
+ this.packageScope = this.answers.packageScope;
123
+ this.templateDir = this.templatePath('homepage');
124
+ this.destDir = path.join(this.monorepoRoot, 'apps', this.appName);
125
+ } catch (error) {
126
+ console.error('');
127
+ console.error('❌ Error during prompting:');
128
+ console.error(` ${error.message}`);
129
+ console.error('');
130
+ process.exit(1);
131
+ }
132
+ }
133
+
134
+ writing() {
135
+ try {
136
+ if (!fs.existsSync(this.templateDir)) {
137
+ console.error('');
138
+ console.error('❌ Error: Template directory not found.');
139
+ console.error(` Expected: ${this.templateDir}`);
140
+ console.error('');
141
+ process.exit(1);
142
+ }
143
+
144
+ const templateData = {
145
+ appName: this.appName,
146
+ AppName: this.appNamePascal,
147
+ packageScope: this.packageScope
148
+ };
149
+
150
+ const files = collectFiles(this.templateDir, this.templateDir, IGNORE_LIST);
151
+
152
+ if (files.length === 0) {
153
+ console.error('');
154
+ console.error('❌ Error: No template files found.');
155
+ console.error(` Template directory: ${this.templateDir}`);
156
+ console.error('');
157
+ process.exit(1);
158
+ }
159
+
160
+ for (const relPath of files) {
161
+ const srcPath = path.join(this.templateDir, relPath);
162
+ const destRelPath = transformDestPath(relPath);
163
+ const destPath = path.join(this.destDir, destRelPath);
164
+
165
+ if (isTemplateFile(relPath)) {
166
+ this.fs.copyTpl(srcPath, destPath, templateData);
167
+ } else {
168
+ this.fs.copy(srcPath, destPath);
169
+ }
170
+ }
171
+ } catch (error) {
172
+ console.error('');
173
+ console.error('❌ Error during file generation:');
174
+ console.error(` ${error.message}`);
175
+ console.error('');
176
+ process.exit(1);
177
+ }
178
+ }
179
+
180
+ end() {
181
+ this.log('');
182
+ this.log('✅ 子应用创建成功!');
183
+ this.log('');
184
+ this.log(` cd apps/${this.appName}`);
185
+ this.log(' pnpm install');
186
+ this.log(' pnpm dev');
187
+ this.log('');
188
+ }
189
+ };
@@ -0,0 +1,4 @@
1
+ # Default: 5
2
+ CHECK_TIMEOUT=10
3
+ DID_YOU_KNOW=none
4
+ PORT=8010
@@ -0,0 +1,116 @@
1
+ # <%= appName %> 子应用
2
+
3
+ qiankun 微前端子应用,基于 UmiJS Max 构建。
4
+
5
+ ## 快速开始
6
+
7
+ ### 安装依赖
8
+
9
+ ```bash
10
+ # 在项目根目录执行
11
+ pnpm install
12
+ ```
13
+
14
+ ### 启动开发服务
15
+
16
+ ```bash
17
+ # 方式一:在项目根目录执行
18
+ pnpm -C apps/<%= appName %> dev
19
+
20
+ # 方式二:进入子应用目录执行
21
+ cd apps/<%= appName %>
22
+ pnpm dev
23
+ ```
24
+
25
+ ## 环境变量配置
26
+
27
+ 在 `apps/<%= appName %>/.env.local` 文件中配置环境变量(如果不存在请创建):
28
+
29
+ ```bash
30
+ # 开发服务器端口号(默认 8000)
31
+ PORT=8001
32
+
33
+ # 其他环境变量示例
34
+ # MOCK=none # 禁用 mock 数据
35
+ ```
36
+
37
+ > **提示**:`.env.local` 文件不会被 Git 追踪,适合存放本地开发配置。
38
+
39
+ ## 常用命令
40
+
41
+ | 命令 | 说明 |
42
+ |---|---|
43
+ | `pnpm dev` | 启动开发服务器 |
44
+ | `pnpm start` | 同 `pnpm dev` |
45
+ | `pnpm build` | 生产环境构建 |
46
+ | `pnpm build:development` | 开发环境构建 |
47
+ | `pnpm build:testing` | 测试环境构建 |
48
+ | `pnpm build:production` | 生产环境构建 |
49
+ | `pnpm setup` | 初始化 Umi 配置 |
50
+
51
+ ## 目录结构
52
+
53
+ ```
54
+ <%= appName %>/
55
+ ├── config/ # Umi 配置目录
56
+ │ ├── config.ts # 基础配置
57
+ │ ├── config.dev.ts # 开发环境配置
58
+ │ ├── config.prod.ts # 生产环境配置
59
+ │ ├── config.testing.ts # 测试环境配置
60
+ │ └── routes.ts # 路由配置
61
+ ├── mock/ # Mock 数据
62
+ │ └── api.mock.ts
63
+ ├── src/
64
+ │ ├── app.tsx # Umi 运行时配置
65
+ │ ├── assets/ # 静态资源
66
+ │ ├── common/ # 公共模块
67
+ │ │ ├── logger.ts # 日志工具
68
+ │ │ ├── mainApp.ts # 主应用通信
69
+ │ │ └── request.ts # 请求封装
70
+ │ ├── pages/ # 页面组件
71
+ │ ├── styles/ # 样式文件
72
+ │ └── global.less # 全局样式
73
+ ├── .env.local # 本地环境变量(需自行创建)
74
+ ├── package.json
75
+ └── tsconfig.json
76
+ ```
77
+
78
+ ## 微前端配置
79
+
80
+ 本应用作为 qiankun 子应用运行,关键配置:
81
+
82
+ ```typescript
83
+ // config/config.ts
84
+ {
85
+ mountElementId: '<%= appName %>-root', // 挂载元素 ID
86
+ qiankun: {
87
+ slave: {}, // 启用子应用模式
88
+ },
89
+ }
90
+ ```
91
+
92
+ ## 共享依赖
93
+
94
+ 如项目配置了共享样式包,可在 Less 文件中引入:
95
+
96
+ ```less
97
+ @import '@your-scope/shared-styles/variables';
98
+ ```
99
+
100
+ ## 相关文档
101
+
102
+ ### 项目文档
103
+
104
+ - [项目根目录 README](../../README.md)
105
+
106
+ ### UmiJS 官方文档
107
+
108
+ | 文档 | 说明 |
109
+ |---|---|
110
+ | [快速上手](https://umijs.org/docs/guides/getting-started) | 环境准备、创建项目、启动与部署 |
111
+ | [目录结构](https://umijs.org/docs/guides/directory-structure) | 项目目录约定 |
112
+ | [路由](https://umijs.org/docs/guides/routes) | 路由配置与约定式路由 |
113
+ | [环境变量](https://umijs.org/docs/guides/env-variables) | `.env` 文件与环境变量配置 |
114
+ | [Mock 数据](https://umijs.org/docs/guides/mock) | 本地 Mock 数据配置 |
115
+ | [微前端](https://umijs.org/docs/max/micro-frontend) | qiankun 微前端集成 |
116
+ | [配置](https://umijs.org/docs/api/config) | 完整配置项参考 |
@@ -0,0 +1,9 @@
1
+ /node_modules
2
+ /.env.local
3
+ /.umirc.local.ts
4
+ /config/config.local.ts
5
+ /src/.umi
6
+ /src/.umi-production
7
+ /src/.umi-test
8
+ /dist
9
+ .swc
@@ -0,0 +1,59 @@
1
+ // https://umijs.org/config/
2
+
3
+ import { defineConfig } from '@umijs/max';
4
+
5
+ /**
6
+ * 开发环境配置
7
+ * - 不配置 externals,直接打包依赖,方便独立运行调试
8
+ * - 生产环境通过 config.prod.ts 配置 externals 复用主应用依赖
9
+ */
10
+ const config: ReturnType<typeof defineConfig> = {
11
+ publicPath: '/',
12
+ base: '/',
13
+
14
+ define: {
15
+ 'process.env.NODE_ENV': 'development',
16
+ },
17
+ // /**
18
+ // * @name 脚本加载配置
19
+ // * @description 开发环境独立运行时,通过 CDN 加载公共依赖
20
+ // * 作为微前端子应用运行时,这些库由主应用提供
21
+ // */
22
+ // headScripts: [
23
+ // 'https://unpkg.com/react@18/umd/react.development.js',
24
+ // 'https://unpkg.com/react-dom@18/umd/react-dom.development.js',
25
+ // 'https://unpkg.com/@arco-design/web-react@latest/dist/arco.min.js',
26
+ // ],
27
+
28
+ // /**
29
+ // * @name 样式加载配置
30
+ // * @description 开发环境独立运行时加载 Arco Design CSS
31
+ // */
32
+ // links: [
33
+ // {
34
+ // rel: 'stylesheet',
35
+ // href: 'https://unpkg.com/@arco-design/web-react@latest/dist/css/arco.min.css',
36
+ // },
37
+ // ],
38
+
39
+ // /**
40
+ // * @name 外部依赖配置
41
+ // * @description 开发环境也需要 externals,配合 CDN 使用
42
+ // */
43
+ // externals: {
44
+ // react: 'window.React',
45
+ // 'react-dom': 'window.ReactDOM',
46
+ // '@arco-design/web-react': 'window.arco',
47
+ // },
48
+ /**
49
+ * @name 样式加载配置
50
+ * @description 开发环境独立运行时加载 Arco Design CSS
51
+ * 作为微前端子应用运行时,样式由主应用提供
52
+ */
53
+ styles: [
54
+ // Arco Design 基础样式
55
+ 'https://unpkg.com/@arco-design/web-react@2.66.6/dist/css/arco.min.css',
56
+ ],
57
+ };
58
+
59
+ export default defineConfig(config);
@@ -0,0 +1,41 @@
1
+ // https://umijs.org/config/
2
+
3
+ import { defineConfig } from '@umijs/max';
4
+ const { CDN_PUBLIC_PATH } = process.env;
5
+
6
+ const PUBLIC_PATH: string = CDN_PUBLIC_PATH
7
+ ? `${CDN_PUBLIC_PATH.replace(/\/?$/, '/') }homepage/`
8
+ : '/homepage/';
9
+
10
+ const config: ReturnType<typeof defineConfig> = {
11
+ // 生产环境:将所有代码打包到一个文件
12
+ extraBabelPlugins: ['babel-plugin-dynamic-import-node'],
13
+
14
+ // 禁用代码分割,只输出一个 JS 和一个 CSS
15
+ chainWebpack(memo) {
16
+ // 禁用 splitChunks
17
+ memo.optimization.splitChunks(false);
18
+ // 禁用 runtimeChunk
19
+ memo.optimization.runtimeChunk(false);
20
+ return memo;
21
+ },
22
+ publicPath: PUBLIC_PATH,
23
+
24
+
25
+ /**
26
+ * @name 外部依赖配置
27
+ * @description 将大型公共库排除打包,运行时从主应用获取
28
+ * @doc https://umijs.org/docs/api/config#externals
29
+ *
30
+ * 作为 qiankun 子应用时,这些库由主应用提供:
31
+ * - react / react-dom: 主应用已加载,避免多实例问题
32
+ * - @arco-design/web-react: 主应用已加载,复用组件和样式
33
+ */
34
+ externals: {
35
+ react: 'React',
36
+ 'react-dom': 'ReactDOM',
37
+ '@arco-design/web-react': 'arco',
38
+ },
39
+ };
40
+
41
+ export default defineConfig(config);
@@ -0,0 +1,40 @@
1
+ // https://umijs.org/config/
2
+
3
+ import { defineConfig } from '@umijs/max';
4
+ const { CDN_PUBLIC_PATH } = process.env;
5
+
6
+ const PUBLIC_PATH: string = CDN_PUBLIC_PATH
7
+ ? `${CDN_PUBLIC_PATH.replace(/\/?$/, '/')}homepage/`
8
+ : '/homepage/';
9
+
10
+ const config: ReturnType<typeof defineConfig> = {
11
+ // 测试环境:将所有代码打包到一个文件
12
+ extraBabelPlugins: ['babel-plugin-dynamic-import-node'],
13
+
14
+ // 禁用代码分割,只输出一个 JS 和一个 CSS
15
+ chainWebpack(memo) {
16
+ // 禁用 splitChunks
17
+ memo.optimization.splitChunks(false);
18
+ // 禁用 runtimeChunk
19
+ memo.optimization.runtimeChunk(false);
20
+ return memo;
21
+ },
22
+ publicPath: PUBLIC_PATH,
23
+
24
+ /**
25
+ * @name 外部依赖配置
26
+ * @description 将大型公共库排除打包,运行时从主应用获取
27
+ * @doc https://umijs.org/docs/api/config#externals
28
+ *
29
+ * 作为 qiankun 子应用时,这些库由主应用提供:
30
+ * - react / react-dom: 主应用已加载,避免多实例问题
31
+ * - @arco-design/web-react: 主应用已加载,复用组件和样式
32
+ */
33
+ externals: {
34
+ react: 'React',
35
+ 'react-dom': 'ReactDOM',
36
+ '@arco-design/web-react': 'arco',
37
+ },
38
+ };
39
+
40
+ export default defineConfig(config);
@@ -0,0 +1,102 @@
1
+ // https://umijs.org/config/
2
+
3
+ import { defineConfig } from '@umijs/max';
4
+ import routes from './routes';
5
+
6
+ /**
7
+ * @name 使用公共路径
8
+ * @description 部署时的路径
9
+ */
10
+ const PUBLIC_PATH = '/dist/<%= appName %>/';
11
+
12
+ const config: ReturnType<typeof defineConfig> = {
13
+ /**
14
+ * @name 挂载元素 ID
15
+ * @description React 应用挂载的 DOM 元素 id
16
+ */
17
+ mountElementId: '<%= appName %>-root',
18
+
19
+ /**
20
+ * @name 基础路径
21
+ * @description 子应用的路由前缀
22
+ */
23
+ base: '/',
24
+
25
+ /**
26
+ * @name 开启 hash 模式
27
+ * @description 让 build 之后的产物包含 hash 后缀
28
+ */
29
+ hash: false,
30
+
31
+ publicPath: PUBLIC_PATH,
32
+
33
+ /**
34
+ * @name 路由配置
35
+ */
36
+ routes,
37
+
38
+ /**
39
+ * @name moment 的国际化配置
40
+ */
41
+ ignoreMomentLocale: true,
42
+
43
+ /**
44
+ * @name 快速热更新配置
45
+ */
46
+ fastRefresh: true,
47
+
48
+ //============== 以下都是 max 的插件配置 ===============
49
+
50
+ /**
51
+ * @name 网络请求配置
52
+ * @doc https://umijs.org/docs/max/request
53
+ */
54
+ request: {},
55
+
56
+ /**
57
+ * @name 数据流插件
58
+ * @doc https://umijs.org/docs/max/data-flow
59
+ */
60
+ model: {},
61
+
62
+ /**
63
+ * @name 全局初始状态
64
+ */
65
+ initialState: {},
66
+
67
+ /**
68
+ * @name layout 插件
69
+ * @description 禁用内置 layout,子应用使用自定义布局
70
+ */
71
+ layout: false,
72
+
73
+ /**
74
+ * @name 其他配置
75
+ */
76
+ esbuildMinifyIIFE: true,
77
+
78
+ define: {
79
+ 'process.env.NODE_ENV': process.env.NODE_ENV,
80
+ },
81
+
82
+ /**
83
+ * @name qiankun 微前端配置
84
+ * @description 作为子应用
85
+ * @doc https://umijs.org/docs/max/micro-frontend
86
+ */
87
+ qiankun: {
88
+ slave: {},
89
+ },
90
+
91
+ /**
92
+ * @name 代码拆分配置
93
+ * @description 确保动态 import 的模块打包为独立 chunk
94
+ * @doc https://umijs.org/docs/api/config#codeSplitting
95
+ */
96
+ codeSplitting: {
97
+ jsStrategy: 'granularChunks',
98
+ },
99
+ };
100
+
101
+ export default defineConfig(config);
102
+
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @name 路由配置
3
+ * @description homepage 子应用的路由配置
4
+ */
5
+ export default [
6
+ { path: '/<%= appName %>', component: '@/pages/index' },
7
+ ];