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.
- package/README.md +84 -0
- package/bin/mico.js +316 -0
- package/generators/micro-react/ignore-list.json +8 -0
- package/generators/micro-react/index.js +158 -0
- package/generators/micro-react/templates/.commitlintrc.js +6 -0
- package/generators/micro-react/templates/.cursor/rules/always-read-docs.mdc +129 -0
- package/generators/micro-react/templates/.cursor/rules/cicd-deploy.mdc +143 -0
- package/generators/micro-react/templates/.cursor/rules/coding-conventions.mdc +206 -0
- package/generators/micro-react/templates/.cursor/rules/commit-conventions.mdc +111 -0
- package/generators/micro-react/templates/.cursor/rules/development-guide.mdc +295 -0
- package/generators/micro-react/templates/.cursor/rules/layout-app.mdc +275 -0
- package/generators/micro-react/templates/.cursor/rules/micro-frontend.mdc +196 -0
- package/generators/micro-react/templates/.cursor/rules/project-overview.mdc +128 -0
- package/generators/micro-react/templates/.cursor/rules/request-auth.mdc +220 -0
- package/generators/micro-react/templates/.cursor/rules/theme-system.mdc +206 -0
- package/generators/micro-react/templates/.editorconfig +16 -0
- package/generators/micro-react/templates/.env +3 -0
- package/generators/micro-react/templates/.eslintrc.js +30 -0
- package/generators/micro-react/templates/.husky/commit-msg +2 -0
- package/generators/micro-react/templates/.husky/pre-commit +2 -0
- package/generators/micro-react/templates/.lintstagedrc +5 -0
- package/generators/micro-react/templates/.stylelintrc.js +25 -0
- package/generators/micro-react/templates/AGENTS.md +39 -0
- package/generators/micro-react/templates/CICD/start_dev.sh +30 -0
- package/generators/micro-react/templates/CICD/start_local.sh +30 -0
- package/generators/micro-react/templates/CICD/start_prod.sh +30 -0
- package/generators/micro-react/templates/CICD/start_test.sh +30 -0
- package/generators/micro-react/templates/CICD/wangsu_fresh_dev.sh +19 -0
- package/generators/micro-react/templates/CICD/wangsu_fresh_prod.sh +19 -0
- package/generators/micro-react/templates/CICD/wangsu_fresh_test.sh +19 -0
- package/generators/micro-react/templates/CLAUDE.md +106 -0
- package/generators/micro-react/templates/README.md +84 -0
- package/generators/micro-react/templates/_gitignore +57 -0
- package/generators/micro-react/templates/_npmrc +2 -0
- package/generators/micro-react/templates/apps/layout/.env +4 -0
- package/generators/micro-react/templates/apps/layout/.eslintrc.js +10 -0
- package/generators/micro-react/templates/apps/layout/.lintstagedrc +17 -0
- package/generators/micro-react/templates/apps/layout/.prettierignore +3 -0
- package/generators/micro-react/templates/apps/layout/.prettierrc +8 -0
- package/generators/micro-react/templates/apps/layout/.stylelintrc.js +20 -0
- package/generators/micro-react/templates/apps/layout/README.md +37 -0
- package/generators/micro-react/templates/apps/layout/config/config.dev.ts +54 -0
- package/generators/micro-react/templates/apps/layout/config/config.prod.ts +37 -0
- package/generators/micro-react/templates/apps/layout/config/config.testing.ts +27 -0
- package/generators/micro-react/templates/apps/layout/config/config.ts +132 -0
- package/generators/micro-react/templates/apps/layout/config/routes.ts +13 -0
- package/generators/micro-react/templates/apps/layout/mock/api.mock.ts +78 -0
- package/generators/micro-react/templates/apps/layout/mock/menus.json +100 -0
- package/generators/micro-react/templates/apps/layout/mock/menus.ts +11 -0
- package/generators/micro-react/templates/apps/layout/mock/user.mock.ts +20 -0
- package/generators/micro-react/templates/apps/layout/package.json +45 -0
- package/generators/micro-react/templates/apps/layout/public/font/ar-SA.js +54 -0
- package/generators/micro-react/templates/apps/layout/public/font/default.js +54 -0
- package/generators/micro-react/templates/apps/layout/src/app.tsx +123 -0
- package/generators/micro-react/templates/apps/layout/src/assets/.gitkeep +0 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/cs-auth-manager.ts +220 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/index.ts +41 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/tool.ts +3 -0
- package/generators/micro-react/templates/apps/layout/src/common/auth/type.ts +6 -0
- package/generators/micro-react/templates/apps/layout/src/common/constants.ts +38 -0
- package/generators/micro-react/templates/apps/layout/src/common/env.ts +73 -0
- package/generators/micro-react/templates/apps/layout/src/common/helpers.ts +69 -0
- package/generators/micro-react/templates/apps/layout/src/common/locale.ts +123 -0
- package/generators/micro-react/templates/apps/layout/src/common/logger.ts +45 -0
- package/generators/micro-react/templates/apps/layout/src/common/menu/index.ts +2 -0
- package/generators/micro-react/templates/apps/layout/src/common/menu/parser.ts +143 -0
- package/generators/micro-react/templates/apps/layout/src/common/menu/types.ts +92 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/config.ts +73 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/index.ts +188 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/interceptors.ts +186 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/sso.ts +132 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/token-refresh.ts +136 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/types.ts +44 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/url-resolver.ts +75 -0
- package/generators/micro-react/templates/apps/layout/src/common/theme.ts +107 -0
- package/generators/micro-react/templates/apps/layout/src/common/types.ts +7 -0
- package/generators/micro-react/templates/apps/layout/src/common/upload/index.ts +2 -0
- package/generators/micro-react/templates/apps/layout/src/common/upload/oss.ts +401 -0
- package/generators/micro-react/templates/apps/layout/src/common/upload/types.ts +47 -0
- package/generators/micro-react/templates/apps/layout/src/common/uploadFiles.ts +35 -0
- package/generators/micro-react/templates/apps/layout/src/components/IconFont/index.tsx +25 -0
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.less +44 -0
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.tsx +121 -0
- package/generators/micro-react/templates/apps/layout/src/constants/index.ts +15 -0
- package/generators/micro-react/templates/apps/layout/src/global.less +13 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/index.ts +3 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useAuth.ts +75 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useMenu.ts +35 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useMenuState.ts +112 -0
- package/generators/micro-react/templates/apps/layout/src/hooks/useTheme.ts +124 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.less +109 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.tsx +97 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.less +164 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.tsx +165 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/index.less +71 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/index.tsx +91 -0
- package/generators/micro-react/templates/apps/layout/src/locales/en-US.ts +20 -0
- package/generators/micro-react/templates/apps/layout/src/locales/zh-CN.ts +19 -0
- package/generators/micro-react/templates/apps/layout/src/models/global.ts +13 -0
- package/generators/micro-react/templates/apps/layout/src/pages/Home/index.less +3 -0
- package/generators/micro-react/templates/apps/layout/src/pages/Home/index.tsx +7 -0
- package/generators/micro-react/templates/apps/layout/src/requestErrorConfig.ts +171 -0
- package/generators/micro-react/templates/apps/layout/src/services/auth.ts +37 -0
- package/generators/micro-react/templates/apps/layout/src/services/oss.ts +40 -0
- package/generators/micro-react/templates/apps/layout/src/styles/arco-override.less +78 -0
- package/generators/micro-react/templates/apps/layout/src/styles/themes/dark/custom-var.less +244 -0
- package/generators/micro-react/templates/apps/layout/src/styles/themes/normal/custom-var.less +195 -0
- package/generators/micro-react/templates/apps/layout/src/styles/variables.less +5 -0
- package/generators/micro-react/templates/apps/layout/src/utils/format.ts +4 -0
- package/generators/micro-react/templates/apps/layout/tailwind.config.js +7 -0
- package/generators/micro-react/templates/apps/layout/tailwind.css +3 -0
- package/generators/micro-react/templates/apps/layout/tsconfig.json +3 -0
- package/generators/micro-react/templates/apps/layout/typings.d.ts +1 -0
- package/generators/micro-react/templates/deployDesc.md +60 -0
- package/generators/micro-react/templates/docs/commit-message.md +98 -0
- package/generators/micro-react/templates/package.json +35 -0
- package/generators/micro-react/templates/packages/shared-styles/README.md +125 -0
- package/generators/micro-react/templates/packages/shared-styles/arco-override.less +78 -0
- package/generators/micro-react/templates/packages/shared-styles/index.less +14 -0
- package/generators/micro-react/templates/packages/shared-styles/package.json +27 -0
- package/generators/micro-react/templates/packages/shared-styles/theme-inject.less +10 -0
- package/generators/micro-react/templates/packages/shared-styles/themes/dark/custom-var.less +246 -0
- package/generators/micro-react/templates/packages/shared-styles/themes/normal/custom-var.less +195 -0
- package/generators/micro-react/templates/packages/shared-styles/variables-only.less +301 -0
- package/generators/micro-react/templates/packages/shared-styles/variables.less +363 -0
- package/generators/micro-react/templates/pnpm-workspace.yaml +9 -0
- package/generators/micro-react/templates/scripts/collect-dist.js +68 -0
- package/generators/micro-react/templates/scripts/create-umi-app.sh +61 -0
- package/generators/micro-react/templates/scripts/dev.js +133 -0
- package/generators/micro-react/templates/turbo.json +68 -0
- package/generators/subapp-react/ignore-list.json +7 -0
- package/generators/subapp-react/index.js +189 -0
- package/generators/subapp-react/templates/homepage/.env +4 -0
- package/generators/subapp-react/templates/homepage/README.md +116 -0
- package/generators/subapp-react/templates/homepage/_gitignore +9 -0
- package/generators/subapp-react/templates/homepage/config/config.dev.ts +59 -0
- package/generators/subapp-react/templates/homepage/config/config.prod.ts +41 -0
- package/generators/subapp-react/templates/homepage/config/config.testing.ts +40 -0
- package/generators/subapp-react/templates/homepage/config/config.ts +102 -0
- package/generators/subapp-react/templates/homepage/config/routes.ts +7 -0
- package/generators/subapp-react/templates/homepage/mock/api.mock.ts +59 -0
- package/generators/subapp-react/templates/homepage/package.json +30 -0
- package/generators/subapp-react/templates/homepage/src/app.tsx +80 -0
- package/generators/subapp-react/templates/homepage/src/assets/yay.jpg +0 -0
- package/generators/subapp-react/templates/homepage/src/common/logger.ts +42 -0
- package/generators/subapp-react/templates/homepage/src/common/mainApp.ts +53 -0
- package/generators/subapp-react/templates/homepage/src/common/request.ts +49 -0
- package/generators/subapp-react/templates/homepage/src/global.less +26 -0
- package/generators/subapp-react/templates/homepage/src/pages/index.less +139 -0
- package/generators/subapp-react/templates/homepage/src/pages/index.tsx +342 -0
- package/generators/subapp-react/templates/homepage/src/styles/theme.less +6 -0
- package/generators/subapp-react/templates/homepage/tsconfig.json +3 -0
- package/generators/subapp-react/templates/homepage/typings.d.ts +17 -0
- package/lib/utils.js +165 -0
- package/package.json +31 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 主题系统 - 亮色/暗黑主题切换实现
|
|
3
|
+
globs: ["**/themes/**", "**/useTheme**", "**/*.less"]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 主题系统
|
|
7
|
+
|
|
8
|
+
## 架构概览
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
12
|
+
│ useTheme Hook │
|
|
13
|
+
│ ┌─────────────────────────────────────────────────────────┐│
|
|
14
|
+
│ │ theme: 'light' | 'dark' ││
|
|
15
|
+
│ │ toggleTheme(): 切换主题 ││
|
|
16
|
+
│ │ setTheme(theme): 设置指定主题 ││
|
|
17
|
+
│ │ isDark: boolean ││
|
|
18
|
+
│ └─────────────────────────────────────────────────────────┘│
|
|
19
|
+
│ ↓ │
|
|
20
|
+
│ ┌─────────────────────────────────────────────────────────┐│
|
|
21
|
+
│ │ body[arco-theme="dark"] → Arco Design 组件 ││
|
|
22
|
+
│ │ body[data-theme="dark"] → 自定义 CSS 变量 ││
|
|
23
|
+
│ └─────────────────────────────────────────────────────────┘│
|
|
24
|
+
└─────────────────────────────────────────────────────────────┘
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 核心文件
|
|
28
|
+
|
|
29
|
+
| 文件 | 说明 |
|
|
30
|
+
|------|------|
|
|
31
|
+
| `packages/shared-styles/` | **共享样式包(主应用和子应用共用)** |
|
|
32
|
+
| `packages/shared-styles/index.less` | 入口文件,导入全部样式 |
|
|
33
|
+
| `packages/shared-styles/variables.less` | Less 变量定义 |
|
|
34
|
+
| `packages/shared-styles/themes/normal/custom-var.less` | 亮色主题变量 |
|
|
35
|
+
| `packages/shared-styles/themes/dark/custom-var.less` | 暗黑主题变量 |
|
|
36
|
+
| `packages/shared-styles/arco-override.less` | Arco Design 变量覆盖 |
|
|
37
|
+
| `apps/layout/src/hooks/useTheme.ts` | 主题管理 Hook |
|
|
38
|
+
| `apps/layout/src/common/theme.ts` | 主题初始化 |
|
|
39
|
+
|
|
40
|
+
## useTheme Hook
|
|
41
|
+
|
|
42
|
+
### 接口
|
|
43
|
+
```typescript
|
|
44
|
+
type Theme = 'light' | 'dark';
|
|
45
|
+
|
|
46
|
+
interface UseThemeReturn {
|
|
47
|
+
theme: Theme; // 当前主题
|
|
48
|
+
isDark: boolean; // 是否暗黑模式
|
|
49
|
+
toggleTheme: () => void; // 切换主题
|
|
50
|
+
setTheme: (theme: Theme) => void; // 设置指定主题
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 使用示例
|
|
55
|
+
```tsx
|
|
56
|
+
import { useTheme } from '@/hooks/useTheme';
|
|
57
|
+
import { IconSun, IconMoon } from '@arco-design/web-react/icon';
|
|
58
|
+
|
|
59
|
+
const ThemeToggle: React.FC = () => {
|
|
60
|
+
const { isDark, toggleTheme } = useTheme();
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<Button onClick={toggleTheme}>
|
|
64
|
+
{isDark ? <IconSun /> : <IconMoon />}
|
|
65
|
+
</Button>
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## CSS 变量定义
|
|
71
|
+
|
|
72
|
+
### 亮色主题 (normal/custom-var.less)
|
|
73
|
+
```less
|
|
74
|
+
body[data-theme='normal'] {
|
|
75
|
+
--Brand1-1: #E8F3FF;
|
|
76
|
+
--Brand1-6: #165DFF;
|
|
77
|
+
--color-text-1: #1D2129;
|
|
78
|
+
--color-text-5: #FFFFFF;
|
|
79
|
+
--color-fill-1: #F7F8FA;
|
|
80
|
+
--color-border-1: #F2F3F5;
|
|
81
|
+
// ...
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 暗黑主题 (dark/custom-var.less)
|
|
86
|
+
```less
|
|
87
|
+
body[data-theme='dark'] {
|
|
88
|
+
--Brand1-1: #001935;
|
|
89
|
+
--Brand1-6: #3C7EFF;
|
|
90
|
+
--color-text-1: #FFFFFF;
|
|
91
|
+
--color-text-5: #1D2129;
|
|
92
|
+
--color-fill-1: #232324;
|
|
93
|
+
--color-border-1: #3A3A3C;
|
|
94
|
+
// ...
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## Less 变量使用
|
|
99
|
+
|
|
100
|
+
### variables.less
|
|
101
|
+
```less
|
|
102
|
+
// Less 变量引用 CSS 变量,提供编辑器类型提示
|
|
103
|
+
@Brand1-1: var(--Brand1-1);
|
|
104
|
+
@Brand1-6: var(--Brand1-6);
|
|
105
|
+
@color-text-1: var(--color-text-1);
|
|
106
|
+
@color-fill-1: var(--color-fill-1);
|
|
107
|
+
@color-border-1: var(--color-border-1);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 在组件样式中使用
|
|
111
|
+
```less
|
|
112
|
+
// ✅ 推荐:使用 Less 变量(有编辑器提示)
|
|
113
|
+
.my-card {
|
|
114
|
+
background-color: @color-fill-1;
|
|
115
|
+
color: @color-text-2;
|
|
116
|
+
border: 1px solid @color-border-2;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// ⚠️ 可用:直接使用 CSS 变量
|
|
120
|
+
.my-card {
|
|
121
|
+
background-color: var(--color-fill-1);
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 主要颜色变量
|
|
126
|
+
|
|
127
|
+
> 完整列表见:[shared-styles 包](packages/shared-styles/README.md#主要变量)
|
|
128
|
+
|
|
129
|
+
| 分类 | 变量 | 说明 |
|
|
130
|
+
|------|------|------|
|
|
131
|
+
| 品牌色 | `@Brand1-1` ~ `@Brand1-7` | 由浅到深 |
|
|
132
|
+
| 文字色 | `@color-text-1` ~ `@color-text-5` | 强调 → 纯白 |
|
|
133
|
+
| 填充色 | `@color-fill-1` ~ `@color-fill-5` | 浅 → 深 |
|
|
134
|
+
| 边框色 | `@color-border-1` ~ `@color-border-4` | 浅 → 深 |
|
|
135
|
+
| 状态色 | `@Success-*`, `@Warning-*`, `@Danger-*` | 成功/警告/危险 |
|
|
136
|
+
|
|
137
|
+
## 主题切换原理
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
const applyTheme = (theme: Theme) => {
|
|
141
|
+
if (theme === 'dark') {
|
|
142
|
+
// Arco Design 暗黑模式
|
|
143
|
+
document.body.setAttribute('arco-theme', 'dark');
|
|
144
|
+
// 自定义 CSS 变量
|
|
145
|
+
document.body.setAttribute('data-theme', 'dark');
|
|
146
|
+
} else {
|
|
147
|
+
document.body.removeAttribute('arco-theme');
|
|
148
|
+
document.body.setAttribute('data-theme', 'normal');
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 持久化
|
|
154
|
+
|
|
155
|
+
- **存储 Key**: `<%= projectName %>-theme`
|
|
156
|
+
- **存储位置**: localStorage
|
|
157
|
+
- **默认行为**: 未手动设置时跟随系统偏好
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
// 获取存储的主题或系统主题
|
|
161
|
+
const getStoredTheme = (): Theme => {
|
|
162
|
+
const stored = localStorage.getItem('<%= projectName %>-theme');
|
|
163
|
+
if (stored === 'light' || stored === 'dark') {
|
|
164
|
+
return stored;
|
|
165
|
+
}
|
|
166
|
+
// 跟随系统偏好
|
|
167
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
168
|
+
? 'dark'
|
|
169
|
+
: 'light';
|
|
170
|
+
};
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 子应用主题复用
|
|
174
|
+
|
|
175
|
+
> 详细配置请参考:[主题色切换文档](apps/layout/docs/feature-主题色切换.md#微前端子应用主题适配)
|
|
176
|
+
|
|
177
|
+
### 快速配置
|
|
178
|
+
|
|
179
|
+
```less
|
|
180
|
+
// global.less - 仅导入 Less 变量(不打包 CSS 变量)
|
|
181
|
+
@import '@<%= projectName %>/shared-styles/variables-only';
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
```typescript
|
|
185
|
+
// app.tsx - 开发环境条件注入(生产环境被 tree-shake)
|
|
186
|
+
if (process.env.NODE_ENV === 'development') {
|
|
187
|
+
if (typeof window !== 'undefined' && !window.__POWERED_BY_QIANKUN__) {
|
|
188
|
+
import('./styles/theme.less');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### ⚠️ 关键点
|
|
194
|
+
|
|
195
|
+
- **必须用 `process.env.NODE_ENV === 'development'`** 包裹主题导入
|
|
196
|
+
- 运行时判断 `window.__POWERED_BY_QIANKUN__` 无法被 tree-shake
|
|
197
|
+
- 生产构建后 CSS 应 < 500 字节(不含主题变量)
|
|
198
|
+
|
|
199
|
+
## 注意事项
|
|
200
|
+
|
|
201
|
+
1. **双属性设置**: `arco-theme` 和 `data-theme` 必须都设置在 `body` 元素上
|
|
202
|
+
2. **选择器格式**: 自定义变量选择器使用 `body[data-theme='dark']`
|
|
203
|
+
3. **优先 Less 变量**: 使用 Less 变量有编辑器提示和类型检查
|
|
204
|
+
4. **避免硬编码颜色**: 所有颜色都应使用主题变量
|
|
205
|
+
5. **系统跟随**: 未手动设置主题时会跟随系统偏好变化
|
|
206
|
+
6. **子应用共享**: 子应用使用 `@<%= projectName %>/shared-styles` 包复用主题
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# http://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
indent_style = space
|
|
6
|
+
indent_size = 2
|
|
7
|
+
end_of_line = lf
|
|
8
|
+
charset = utf-8
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
insert_final_newline = true
|
|
11
|
+
|
|
12
|
+
[*.md]
|
|
13
|
+
trim_trailing_whitespace = false
|
|
14
|
+
|
|
15
|
+
[Makefile]
|
|
16
|
+
indent_style = tab
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* eslint-env node */
|
|
2
|
+
module.exports = {
|
|
3
|
+
root: true,
|
|
4
|
+
env: {
|
|
5
|
+
node: true,
|
|
6
|
+
es2022: true,
|
|
7
|
+
},
|
|
8
|
+
extends: ['eslint:recommended'],
|
|
9
|
+
parserOptions: {
|
|
10
|
+
ecmaVersion: 'latest',
|
|
11
|
+
sourceType: 'module',
|
|
12
|
+
},
|
|
13
|
+
rules: {
|
|
14
|
+
'no-unused-vars': [
|
|
15
|
+
'warn',
|
|
16
|
+
{
|
|
17
|
+
argsIgnorePattern: '^_',
|
|
18
|
+
varsIgnorePattern: '^_',
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
// 忽略 apps/ 子包和 scripts/
|
|
23
|
+
ignorePatterns: [
|
|
24
|
+
'node_modules/',
|
|
25
|
+
'dist/',
|
|
26
|
+
'apps/',
|
|
27
|
+
'scripts/',
|
|
28
|
+
],
|
|
29
|
+
};
|
|
30
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const extendsConfig = [];
|
|
2
|
+
|
|
3
|
+
try {
|
|
4
|
+
extendsConfig.push(require.resolve('@umijs/max/stylelint'));
|
|
5
|
+
} catch (_error) {
|
|
6
|
+
// 如果依赖不存在则跳过,避免 Stylelint 报错
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
extends: extendsConfig,
|
|
11
|
+
rules: {
|
|
12
|
+
'at-rule-no-unknown': [
|
|
13
|
+
true,
|
|
14
|
+
{
|
|
15
|
+
ignoreAtRules: [
|
|
16
|
+
'tailwind',
|
|
17
|
+
'apply',
|
|
18
|
+
'variants',
|
|
19
|
+
'responsive',
|
|
20
|
+
'screen',
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 仓库指南
|
|
2
|
+
|
|
3
|
+
## 项目结构与模块组织
|
|
4
|
+
- `apps/` 存放应用包。当前应用:`apps/[???]/`。
|
|
5
|
+
- 应用源码位于 `apps/[???]/src/`,包含 `pages/`(Vue SFCs)、`layouts/`、`styles/`、`utils/` 和 `assets/`。
|
|
6
|
+
- `scripts/` 包含仓库工具脚本(如 `scripts/dev.js`、`scripts/collect-dist.js`)。
|
|
7
|
+
- `docs/` 存放工作流文档;`CICD/` 包含部署相关资源。
|
|
8
|
+
- `dist/` 是生成的构建产物(收集于仓库根目录)。
|
|
9
|
+
|
|
10
|
+
## 构建、测试和开发命令
|
|
11
|
+
- `pnpm install` 安装 workspace 依赖。
|
|
12
|
+
- `pnpm dev` 运行交互式开发启动器(选择应用)。
|
|
13
|
+
- `pnpm -C apps/[???] dev` 直接运行指定应用。
|
|
14
|
+
- `pnpm build` 构建所有应用用于生产环境;`pnpm build:development|testing|production|local` 设置不同环境模式。
|
|
15
|
+
- `pnpm lint` 运行 Biome + Turbo lint 检查;`pnpm lint:fix` 自动修复。
|
|
16
|
+
- `pnpm test` 跨 packages 运行 Turbo test。
|
|
17
|
+
- `pnpm create:umi-app <name>` 在 `apps/` 下创建新的 Umi 应用脚手架。
|
|
18
|
+
|
|
19
|
+
## 代码风格与命名规范
|
|
20
|
+
- 缩进:2 个空格,LF 换行,去除行尾空白(参见 `.editorconfig`)。
|
|
21
|
+
- 格式化/检查:Biome 处理 JS/TS/JSON;Stylelint 处理 Less/CSS。
|
|
22
|
+
- TypeScript 命名:接口使用 `I` 前缀,枚举使用 `E` 前缀,类型/类别名可用 `T`/`C` 前缀。
|
|
23
|
+
- 保持 Vue SFCs 专注;将复杂视图拆分到页面文件夹下的 `components/` 目录中。
|
|
24
|
+
|
|
25
|
+
## 测试指南
|
|
26
|
+
- 仓库级测试由 `pnpm test`(Turbo)驱动。
|
|
27
|
+
- 如果在应用中添加测试,确保该应用暴露 `test` 脚本以便 Turbo 识别。
|
|
28
|
+
- 建议命名:`*.test.ts` 或 `*.spec.ts`,与模块放在一起或放在 `__tests__/` 目录中。
|
|
29
|
+
|
|
30
|
+
## Commit 与 Pull Request 指南
|
|
31
|
+
- Commit 消息遵循 Conventional Commits 规范(通过 Commitlint):`type(scope): subject`。
|
|
32
|
+
- Subject 长度应为 1-50 个字符。示例:`feat(resource-center): add kol filter`。
|
|
33
|
+
- 常用类型:`feat`、`fix`、`docs`、`refactor`、`perf`、`test`、`chore`、`build`、`ci`。
|
|
34
|
+
- PR 应包含:清晰的摘要、关联的 issue(如有)、已运行的测试命令,以及 UI 变更的截图。
|
|
35
|
+
|
|
36
|
+
## 环境与配置
|
|
37
|
+
- 根目录的环境文件:`.env`、`.env.local`、`.env.[mode][.local]` 通过 `dotenv-cli` 注入。
|
|
38
|
+
- 应用特定的配置覆盖放在 `apps/<app>/.env.local`。
|
|
39
|
+
- 将影响缓存的环境变量添加到 `turbo.json` 的 `globalEnv` 中。
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
source ~/.bashrc
|
|
3
|
+
node -v
|
|
4
|
+
nvm -v
|
|
5
|
+
nvm install 22.20.0
|
|
6
|
+
nvm use 22.20.0
|
|
7
|
+
npm i -g pnpm@10.18.2 --registry=https://registry.npmmirror.com
|
|
8
|
+
pnpm install
|
|
9
|
+
|
|
10
|
+
# 获取当前脚本所在目录
|
|
11
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
+
# 获取项目根目录(假设脚本在 CICD 目录下,所以向上一层)
|
|
13
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
14
|
+
|
|
15
|
+
# 用 node 命令读取 package.json 里的 version 字段
|
|
16
|
+
VERSION=$(node -p "require('$PROJECT_ROOT/package.json').version")
|
|
17
|
+
# 输出项目版本号
|
|
18
|
+
echo "项目版本: $VERSION"
|
|
19
|
+
|
|
20
|
+
# 切换到项目根目录,确保后续命令在根目录下运行
|
|
21
|
+
cd "$PROJECT_ROOT"
|
|
22
|
+
|
|
23
|
+
# 设置子应用的 CDN 公共路径(开发环境)
|
|
24
|
+
export CDN_PUBLIC_PATH="https://cdn-portal-dev.micoplatform.com/<%= projectName %>/${VERSION}/"
|
|
25
|
+
echo "CDN_PUBLIC_PATH: $CDN_PUBLIC_PATH"
|
|
26
|
+
|
|
27
|
+
pnpm run build:development
|
|
28
|
+
|
|
29
|
+
echo "VERSION=$VERSION" > .env_x_<%= projectName %>
|
|
30
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
source ~/.bashrc
|
|
3
|
+
node -v
|
|
4
|
+
nvm -v
|
|
5
|
+
nvm install 22.20.0
|
|
6
|
+
nvm use 22.20.0
|
|
7
|
+
npm i -g pnpm@10.18.2 --registry=https://registry.npmmirror.com
|
|
8
|
+
pnpm install
|
|
9
|
+
|
|
10
|
+
# 获取当前脚本所在目录
|
|
11
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
+
# 获取项目根目录(假设脚本在 CICD 目录下,所以向上一层)
|
|
13
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
14
|
+
|
|
15
|
+
# 用 node 命令读取 package.json 里的 version 字段
|
|
16
|
+
VERSION=$(node -p "require('$PROJECT_ROOT/package.json').version")
|
|
17
|
+
# 输出项目版本号
|
|
18
|
+
echo "项目版本: $VERSION"
|
|
19
|
+
|
|
20
|
+
# 切换到项目根目录,确保后续命令在根目录下运行
|
|
21
|
+
cd "$PROJECT_ROOT"
|
|
22
|
+
|
|
23
|
+
# 设置子应用的 CDN 公共路径(本地环境使用相对路径)
|
|
24
|
+
export CDN_PUBLIC_PATH="./"
|
|
25
|
+
echo "CDN_PUBLIC_PATH: $CDN_PUBLIC_PATH"
|
|
26
|
+
|
|
27
|
+
pnpm run build:local
|
|
28
|
+
|
|
29
|
+
echo "VERSION=$VERSION" > .env_x_<%= projectName %>
|
|
30
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
source ~/.bashrc
|
|
3
|
+
node -v
|
|
4
|
+
nvm -v
|
|
5
|
+
nvm install 22.20.0
|
|
6
|
+
nvm use 22.20.0
|
|
7
|
+
npm i -g pnpm@10.18.2 --registry=https://registry.npmmirror.com
|
|
8
|
+
pnpm install
|
|
9
|
+
|
|
10
|
+
# 获取当前脚本所在目录
|
|
11
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
+
# 获取项目根目录(假设脚本在 CICD 目录下,所以向上一层)
|
|
13
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
14
|
+
|
|
15
|
+
# 用 node 命令读取 package.json 里的 version 字段
|
|
16
|
+
VERSION=$(node -p "require('$PROJECT_ROOT/package.json').version")
|
|
17
|
+
# 输出项目版本号
|
|
18
|
+
echo "项目版本: $VERSION"
|
|
19
|
+
|
|
20
|
+
# 切换到项目根目录,确保后续命令在根目录下运行
|
|
21
|
+
cd "$PROJECT_ROOT"
|
|
22
|
+
|
|
23
|
+
# 设置子应用的 CDN 公共路径(生产环境)
|
|
24
|
+
export CDN_PUBLIC_PATH="https://cdn-portal.micoplatform.com/<%= projectName %>/${VERSION}/"
|
|
25
|
+
echo "CDN_PUBLIC_PATH: $CDN_PUBLIC_PATH"
|
|
26
|
+
|
|
27
|
+
pnpm run build:production
|
|
28
|
+
|
|
29
|
+
echo "VERSION=$VERSION" > .env_x_<%= projectName %>
|
|
30
|
+
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
source ~/.bashrc
|
|
3
|
+
node -v
|
|
4
|
+
nvm -v
|
|
5
|
+
nvm install 22.20.0
|
|
6
|
+
nvm use 22.20.0
|
|
7
|
+
npm i -g pnpm@10.18.2 --registry=https://registry.npmmirror.com
|
|
8
|
+
pnpm install
|
|
9
|
+
|
|
10
|
+
# 获取当前脚本所在目录
|
|
11
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
+
# 获取项目根目录(假设脚本在 CICD 目录下,所以向上一层)
|
|
13
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
14
|
+
|
|
15
|
+
# 用 node 命令读取 package.json 里的 version 字段
|
|
16
|
+
VERSION=$(node -p "require('$PROJECT_ROOT/package.json').version")
|
|
17
|
+
# 输出项目版本号
|
|
18
|
+
echo "项目版本: $VERSION"
|
|
19
|
+
|
|
20
|
+
# 切换到项目根目录,确保后续命令在根目录下运行
|
|
21
|
+
cd "$PROJECT_ROOT"
|
|
22
|
+
|
|
23
|
+
# 设置子应用的 CDN 公共路径(测试环境)
|
|
24
|
+
export CDN_PUBLIC_PATH="https://cdn-portal-test.micoplatform.com/<%= projectName %>/${VERSION}/"
|
|
25
|
+
echo "CDN_PUBLIC_PATH: $CDN_PUBLIC_PATH"
|
|
26
|
+
|
|
27
|
+
pnpm run build:testing
|
|
28
|
+
|
|
29
|
+
echo "VERSION=$VERSION" > .env_x_<%= projectName %>
|
|
30
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
version=$1
|
|
3
|
+
username="mico_fresh"
|
|
4
|
+
apiKey=$(cat ~/.wangsu_key)
|
|
5
|
+
date=`env LANG="en_US.UTF-8" date -u "+%a, %d %b %Y %H:%M:%S GMT"`
|
|
6
|
+
password=`echo -en "$date" | openssl dgst -sha1 -hmac $apiKey -binary | openssl enc -base64`
|
|
7
|
+
echo "打印刷新地址"
|
|
8
|
+
echo "dir1:http://cdn-portal-dev.micoplatform.com/<%= projectName %>/$version/"
|
|
9
|
+
echo "dir2:https://cdn-portal-dev.micoplatform.com/<%= projectName %>/$version/"
|
|
10
|
+
curl -i --url "https://open.chinanetcenter.com/ccm/purge/ItemIdReceiver" -X "POST" -u "$username:$password" -H "Date:$date" -H "Content-Type: application/json" --data-binary @- <<EOF
|
|
11
|
+
{
|
|
12
|
+
"dirs": [
|
|
13
|
+
"http://cdn-portal-dev.micoplatform.com/<%= projectName %>/$version",
|
|
14
|
+
"https://cdn-portal-dev.micoplatform.com/<%= projectName %>/$version"
|
|
15
|
+
],
|
|
16
|
+
"dirAction":"expire"
|
|
17
|
+
}
|
|
18
|
+
EOF
|
|
19
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
version=$1
|
|
3
|
+
username="mico_fresh"
|
|
4
|
+
apiKey=$(cat ~/.wangsu_key)
|
|
5
|
+
date=`env LANG="en_US.UTF-8" date -u "+%a, %d %b %Y %H:%M:%S GMT"`
|
|
6
|
+
password=`echo -en "$date" | openssl dgst -sha1 -hmac $apiKey -binary | openssl enc -base64`
|
|
7
|
+
echo "打印刷新地址"
|
|
8
|
+
echo "dir1:http://cdn-portal.micoplatform.com/<%= projectName %>/$version/"
|
|
9
|
+
echo "dir2:https://cdn-portal.micoplatform.com/<%= projectName %>/$version/"
|
|
10
|
+
curl -i --url "https://open.chinanetcenter.com/ccm/purge/ItemIdReceiver" -X "POST" -u "$username:$password" -H "Date:$date" -H "Content-Type: application/json" --data-binary @- <<EOF
|
|
11
|
+
{
|
|
12
|
+
"dirs": [
|
|
13
|
+
"http://cdn-portal.micoplatform.com/<%= projectName %>/$version",
|
|
14
|
+
"https://cdn-portal.micoplatform.com/<%= projectName %>/$version"
|
|
15
|
+
],
|
|
16
|
+
"dirAction":"expire"
|
|
17
|
+
}
|
|
18
|
+
EOF
|
|
19
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
version=$1
|
|
3
|
+
username="mico_fresh"
|
|
4
|
+
apiKey=$(cat ~/.wangsu_key)
|
|
5
|
+
date=`env LANG="en_US.UTF-8" date -u "+%a, %d %b %Y %H:%M:%S GMT"`
|
|
6
|
+
password=`echo -en "$date" | openssl dgst -sha1 -hmac $apiKey -binary | openssl enc -base64`
|
|
7
|
+
echo "打印刷新地址"
|
|
8
|
+
echo "dir1:http://cdn-portal-test.micoplatform.com/<%= projectName %>/$version/"
|
|
9
|
+
echo "dir2:https://cdn-portal-test.micoplatform.com/<%= projectName %>/$version/"
|
|
10
|
+
curl -i --url "https://open.chinanetcenter.com/ccm/purge/ItemIdReceiver" -X "POST" -u "$username:$password" -H "Date:$date" -H "Content-Type: application/json" --data-binary @- <<EOF
|
|
11
|
+
{
|
|
12
|
+
"dirs": [
|
|
13
|
+
"http://cdn-portal-test.micoplatform.com/<%= projectName %>/$version",
|
|
14
|
+
"https://cdn-portal-test.micoplatform.com/<%= projectName %>/$version"
|
|
15
|
+
],
|
|
16
|
+
"dirAction":"expire"
|
|
17
|
+
}
|
|
18
|
+
EOF
|
|
19
|
+
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
本文件为 Claude Code (claude.ai/code) 在此仓库中工作提供指导。
|
|
4
|
+
|
|
5
|
+
## 项目概述
|
|
6
|
+
|
|
7
|
+
<%= ProjectName %> - 基于 qiankun 微前端架构的 Monorepo 项目。
|
|
8
|
+
|
|
9
|
+
## 技术栈
|
|
10
|
+
|
|
11
|
+
- **Monorepo**: Turborepo + pnpm Workspace
|
|
12
|
+
- **前端框架**: UmiJS 4 (@umijs/max)、React 18、TypeScript
|
|
13
|
+
- **微前端**: qiankun
|
|
14
|
+
- **UI 组件**: Arco Design Web
|
|
15
|
+
- **样式方案**: Tailwind CSS + Less
|
|
16
|
+
- **代码规范**: ESLint、Stylelint、Husky、Commitlint
|
|
17
|
+
|
|
18
|
+
## 常用命令
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 安装依赖
|
|
22
|
+
pnpm install
|
|
23
|
+
|
|
24
|
+
# 开发(交互式选择应用)
|
|
25
|
+
pnpm dev
|
|
26
|
+
|
|
27
|
+
# 直接启动指定应用
|
|
28
|
+
pnpm -C apps/layout dev
|
|
29
|
+
|
|
30
|
+
# 构建
|
|
31
|
+
pnpm build # 生产环境构建
|
|
32
|
+
pnpm build:development # 开发环境
|
|
33
|
+
pnpm build:testing # 测试环境
|
|
34
|
+
pnpm build:production # 生产环境
|
|
35
|
+
|
|
36
|
+
# 代码检查
|
|
37
|
+
pnpm lint # 运行 ESLint + Turbo lint
|
|
38
|
+
pnpm lint:fix # 自动修复 lint 问题
|
|
39
|
+
|
|
40
|
+
# 测试
|
|
41
|
+
pnpm test
|
|
42
|
+
|
|
43
|
+
# 创建新子应用
|
|
44
|
+
mico create subapp-react
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 架构
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
apps/ # Workspace 应用目录
|
|
51
|
+
├── layout/ # 主应用(qiankun master)
|
|
52
|
+
│ ├── src/
|
|
53
|
+
│ │ ├── app.tsx # Umi 运行时配置
|
|
54
|
+
│ │ ├── layouts/ # 布局组件
|
|
55
|
+
│ │ ├── pages/ # 路由页面
|
|
56
|
+
│ │ ├── components/ # 公共组件
|
|
57
|
+
│ │ ├── common/ # 工具模块
|
|
58
|
+
│ │ ├── hooks/ # 自定义 Hooks
|
|
59
|
+
│ │ ├── services/ # API 服务层
|
|
60
|
+
│ │ ├── models/ # Umi model
|
|
61
|
+
│ │ ├── locales/ # 国际化
|
|
62
|
+
│ │ └── styles/ # 主题变量
|
|
63
|
+
│ └── config/ # Umi 配置
|
|
64
|
+
packages/ # 共享包
|
|
65
|
+
├── shared-styles/ # 共享样式
|
|
66
|
+
scripts/ # 构建脚本
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## TypeScript 命名规范
|
|
70
|
+
|
|
71
|
+
- 接口使用 `I` 前缀:`IUserInfo`、`IMenuItem`
|
|
72
|
+
- 枚举使用 `E` 前缀:`EStatus`、`EUserRole`
|
|
73
|
+
- 类型别名可用 `T` 前缀:`TCallback`
|
|
74
|
+
|
|
75
|
+
## 提交信息格式
|
|
76
|
+
|
|
77
|
+
格式:`type(scope): subject`(subject 不超过 50 字符)
|
|
78
|
+
|
|
79
|
+
类型:`feat`、`fix`、`docs`、`style`、`refactor`、`perf`、`test`、`chore`、`build`、`ci`、`wip`、`release`、`deps`
|
|
80
|
+
|
|
81
|
+
示例:
|
|
82
|
+
```
|
|
83
|
+
feat(用户): 添加用户注册功能
|
|
84
|
+
fix(表格): 修复分页显示问题
|
|
85
|
+
refactor(auth): 重构认证服务
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 环境变量
|
|
89
|
+
|
|
90
|
+
- 根目录 `.env` 文件通过 `dotenv-cli` 注入所有应用
|
|
91
|
+
- 应用专属变量放在 `apps/<app>/.env.local`
|
|
92
|
+
- 影响缓存的变量需在 `turbo.json` 的 `globalEnv` 中登记
|
|
93
|
+
|
|
94
|
+
## 核心模块
|
|
95
|
+
|
|
96
|
+
### 请求层
|
|
97
|
+
API 请求配置在 `apps/layout/src/common/request/`。
|
|
98
|
+
|
|
99
|
+
### 认证模块
|
|
100
|
+
认证逻辑在 `apps/layout/src/common/auth/`。
|
|
101
|
+
|
|
102
|
+
### 菜单系统
|
|
103
|
+
菜单解析与类型定义在 `apps/layout/src/common/menu/`。
|
|
104
|
+
|
|
105
|
+
### 微前端
|
|
106
|
+
layout 应用作为 qiankun 主应用,子应用通过 qiankun 配置注册。
|