generator-mico-cli 0.2.1 → 0.2.2-8.beta.1
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 +199 -15
- package/bin/mico.js +232 -27
- package/generators/micro-react/index.js +200 -18
- package/generators/micro-react/meta.json +13 -0
- package/generators/micro-react/templates/.commitlintrc.js +1 -0
- package/generators/micro-react/templates/.cursor/rules/always-read-docs.mdc +14 -4
- package/generators/micro-react/templates/.cursor/rules/cicd-deploy.mdc +10 -8
- package/generators/micro-react/templates/.cursor/rules/coding-conventions.mdc +1 -1
- package/generators/micro-react/templates/.cursor/rules/development-guide.mdc +3 -4
- package/generators/micro-react/templates/.cursor/rules/layout-app.mdc +38 -31
- package/generators/micro-react/templates/.cursor/rules/project-overview.mdc +7 -4
- package/generators/micro-react/templates/.cursor/rules/theme-system.mdc +10 -12
- package/generators/micro-react/templates/.eslintrc.js +25 -1
- package/generators/micro-react/templates/AGENTS.md +5 -2
- package/generators/micro-react/templates/CICD/before_build.sh +76 -0
- package/generators/micro-react/templates/CICD/start_dev.sh +27 -3
- package/generators/micro-react/templates/CICD/start_prod.sh +26 -3
- package/generators/micro-react/templates/CICD/start_test.sh +28 -3
- package/generators/micro-react/templates/CICD/wangsu_fresh_dev.sh +4 -4
- package/generators/micro-react/templates/CICD/wangsu_fresh_prod.sh +4 -4
- package/generators/micro-react/templates/CICD/wangsu_fresh_test.sh +4 -4
- package/generators/micro-react/templates/CLAUDE.md +16 -9
- package/generators/micro-react/templates/README.md +42 -4
- package/generators/micro-react/templates/_gitignore +4 -0
- package/generators/micro-react/templates/_npmrc +4 -0
- package/generators/micro-react/templates/apps/layout/config/config.dev.ts +32 -16
- package/generators/micro-react/templates/apps/layout/config/config.prod.development.ts +24 -29
- package/generators/micro-react/templates/apps/layout/config/config.prod.testing.ts +25 -6
- package/generators/micro-react/templates/apps/layout/config/config.prod.ts +16 -7
- package/generators/micro-react/templates/apps/layout/config/config.ts +27 -4
- package/generators/micro-react/templates/apps/layout/config/routes.ts +5 -5
- package/generators/micro-react/templates/apps/layout/docs/arch-/346/227/245/345/277/227/344/270/216/345/270/270/351/207/217.md +2 -2
- package/generators/micro-react/templates/apps/layout/docs/common-intl.md +372 -0
- package/generators/micro-react/templates/apps/layout/docs/feat-/346/236/204/345/273/272define/344/270/216/345/205/215/350/256/244/350/257/201/345/210/235/345/247/213/346/200/201.md +44 -0
- package/generators/micro-react/templates/apps/layout/docs/feature-404/351/241/265/351/235/242.md +103 -0
- package/generators/micro-react/templates/apps/layout/docs/feature-/344/270/273/351/242/230/350/211/262/345/210/207/346/215/242.md +22 -26
- package/generators/micro-react/templates/apps/layout/docs/feature-/345/276/256/345/211/215/347/253/257/346/250/241/345/274/217.md +185 -28
- package/generators/micro-react/templates/apps/layout/docs/feature-/350/217/234/345/215/225/346/235/203/351/231/220/346/216/247/345/210/266.md +308 -63
- package/generators/micro-react/templates/apps/layout/docs/feature-/350/267/257/347/224/261/344/270/216/350/217/234/345/215/225/350/247/243/350/200/246.md +179 -0
- package/generators/micro-react/templates/apps/layout/docs/fix-SSO/346/227/240/351/231/220/351/207/215/345/256/232/345/220/221.md +88 -0
- package/generators/micro-react/templates/apps/layout/docs/utils-timezone.md +324 -0
- package/generators/micro-react/templates/apps/layout/mock/api.mock.ts +81 -61
- package/generators/micro-react/templates/apps/layout/mock/menus.ts +114 -4
- package/generators/micro-react/templates/apps/layout/mock/pages.ts +86 -0
- package/generators/micro-react/templates/apps/layout/package.json +7 -4
- package/generators/micro-react/templates/apps/layout/src/app.tsx +111 -76
- package/generators/micro-react/templates/apps/layout/src/common/auth/index.ts +3 -0
- package/generators/micro-react/templates/apps/layout/src/common/helpers.ts +177 -0
- package/generators/micro-react/templates/apps/layout/src/common/locale.ts +22 -17
- package/generators/micro-react/templates/apps/layout/src/common/menu/parser.ts +192 -42
- package/generators/micro-react/templates/apps/layout/src/common/menu/types.ts +69 -5
- package/generators/micro-react/templates/apps/layout/src/common/micro/index.ts +34 -0
- package/generators/micro-react/templates/apps/layout/src/common/micro-prefetch.ts +109 -0
- package/generators/micro-react/templates/apps/layout/src/common/portal-data.ts +45 -0
- package/generators/micro-react/templates/apps/layout/src/common/request/config.ts +72 -10
- package/generators/micro-react/templates/apps/layout/src/common/request/index.ts +2 -2
- package/generators/micro-react/templates/apps/layout/src/common/request/interceptors.ts +31 -3
- package/generators/micro-react/templates/apps/layout/src/common/request/sso.ts +29 -11
- package/generators/micro-react/templates/apps/layout/src/common/request/url-resolver.ts +1 -1
- package/generators/micro-react/templates/apps/layout/src/common/route-guard.ts +345 -0
- package/generators/micro-react/templates/apps/layout/src/common/theme.ts +2 -4
- package/generators/micro-react/templates/apps/layout/src/common/upload/oss.ts +3 -4
- package/generators/micro-react/templates/apps/layout/src/common/upload/types.ts +1 -1
- package/generators/micro-react/templates/apps/layout/src/common/uploadFiles.ts +1 -1
- package/generators/micro-react/templates/apps/layout/src/components/AppTabs/index.less +8 -3
- package/generators/micro-react/templates/apps/layout/src/components/AppTabs/index.tsx +25 -8
- package/generators/micro-react/templates/apps/layout/src/components/HeaderDropdown/index.tsx +20 -0
- package/generators/micro-react/templates/apps/layout/src/components/IconFont/index.tsx +5 -6
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.less +21 -6
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/index.tsx +83 -149
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/micro-app-manager.ts +569 -0
- package/generators/micro-react/templates/apps/layout/src/components/RightContent/AvatarDropdown.tsx +383 -0
- package/generators/micro-react/templates/apps/layout/src/components/RightContent/avatar-dropdown.less +35 -0
- package/generators/micro-react/templates/apps/layout/src/components/RightContent/index.ts +2 -0
- package/generators/micro-react/templates/apps/layout/src/constants/index.ts +170 -6
- package/generators/micro-react/templates/apps/layout/src/global.less +18 -9
- package/generators/micro-react/templates/apps/layout/src/hooks/useMenu.ts +3 -2
- package/generators/micro-react/templates/apps/layout/src/hooks/useRoutePermissionRefresh.ts +72 -0
- package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.less +3 -1
- package/generators/micro-react/templates/apps/layout/src/layouts/components/header/index.tsx +10 -55
- package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.less +34 -4
- package/generators/micro-react/templates/apps/layout/src/layouts/components/menu/index.tsx +24 -8
- package/generators/micro-react/templates/apps/layout/src/layouts/index.less +84 -13
- package/generators/micro-react/templates/apps/layout/src/layouts/index.tsx +156 -69
- package/generators/micro-react/templates/apps/layout/src/locales/en-US.ts +12 -0
- package/generators/micro-react/templates/apps/layout/src/locales/zh-CN.ts +12 -0
- package/generators/micro-react/templates/apps/layout/src/pages/403/index.tsx +8 -2
- package/generators/micro-react/templates/apps/layout/src/pages/404/index.tsx +78 -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 -1
- package/generators/micro-react/templates/apps/layout/src/pages/User/Login/index.less +1 -1
- package/generators/micro-react/templates/apps/layout/src/pages/User/Login/index.tsx +3 -3
- package/generators/micro-react/templates/apps/layout/src/requestErrorConfig.ts +1 -1
- package/generators/micro-react/templates/apps/layout/src/services/config/index.ts +63 -0
- package/generators/micro-react/templates/apps/layout/src/services/config/type.ts +30 -0
- package/generators/micro-react/templates/apps/layout/src/services/user.ts +29 -2
- package/generators/micro-react/templates/apps/layout/tailwind.config.js +3 -0
- package/generators/micro-react/templates/deployDesc.md +3 -3
- package/generators/micro-react/templates/dev.preset.json +14 -0
- package/generators/micro-react/templates/docs/dev-preset.md +130 -0
- package/generators/micro-react/templates/package.json +21 -6
- package/generators/micro-react/templates/packages/common-intl/README.md +427 -0
- package/generators/micro-react/templates/packages/common-intl/package.json +34 -0
- package/generators/micro-react/templates/packages/common-intl/src/index.ts +7 -0
- package/generators/micro-react/templates/packages/common-intl/src/indexedDBUtils.ts +51 -0
- package/generators/micro-react/templates/packages/common-intl/src/intl.ts +50 -0
- package/generators/micro-react/templates/packages/common-intl/src/utils.ts +482 -0
- package/generators/micro-react/templates/packages/common-intl/tsconfig.json +22 -0
- package/generators/micro-react/templates/packages/common-intl/vite.config.ts +25 -0
- package/generators/micro-react/templates/scripts/apply-sentry-plugin.ts +45 -0
- package/generators/micro-react/templates/scripts/collect-dist.js +10 -0
- package/generators/micro-react/templates/scripts/dev-preset.js +265 -0
- package/generators/micro-react/templates/scripts/dev-preset.schema.json +39 -0
- package/generators/micro-react/templates/turbo.json +4 -1
- package/generators/subapp-react/index.js +326 -40
- package/generators/subapp-react/meta.json +10 -0
- package/generators/subapp-react/templates/homepage/.env +2 -1
- package/generators/subapp-react/templates/homepage/README.md +3 -3
- package/generators/subapp-react/templates/homepage/config/config.dev.ts +14 -7
- package/generators/subapp-react/templates/homepage/config/config.prod.development.ts +16 -5
- package/generators/subapp-react/templates/homepage/config/config.prod.testing.ts +16 -5
- package/generators/subapp-react/templates/homepage/config/config.prod.ts +14 -5
- package/generators/subapp-react/templates/homepage/config/config.ts +21 -0
- package/generators/subapp-react/templates/homepage/config/routes.ts +2 -2
- package/generators/subapp-react/templates/homepage/mock/api.mock.ts +2 -2
- package/generators/subapp-react/templates/homepage/package.json +7 -4
- package/generators/subapp-react/templates/homepage/src/app.tsx +18 -27
- package/generators/subapp-react/templates/homepage/src/common/request.ts +29 -2
- package/generators/subapp-react/templates/homepage/src/global.less +6 -5
- package/generators/subapp-react/templates/homepage/src/pages/index.less +3 -3
- package/generators/subapp-react/templates/homepage/src/pages/index.tsx +99 -60
- package/generators/subapp-react/templates/homepage/src/styles/theme.less +1 -1
- package/generators/subapp-umd/ignore-list.json +5 -0
- package/generators/subapp-umd/index.js +309 -0
- package/generators/subapp-umd/meta.json +11 -0
- package/generators/subapp-umd/templates/README.md +94 -0
- package/generators/subapp-umd/templates/package.json +35 -0
- package/generators/subapp-umd/templates/public/index.html +34 -0
- package/generators/subapp-umd/templates/src/App.less +15 -0
- package/generators/subapp-umd/templates/src/App.tsx +13 -0
- package/generators/subapp-umd/templates/src/index.ts +2 -0
- package/generators/subapp-umd/templates/tsconfig.json +27 -0
- package/generators/subapp-umd/templates/webpack.config.js +70 -0
- package/lib/utils.js +332 -2
- package/package.json +15 -2
- package/generators/micro-react/templates/apps/layout/mock/menus.json +0 -100
- package/generators/micro-react/templates/apps/layout/src/common/constants.ts +0 -38
- package/generators/micro-react/templates/apps/layout/src/components/MicroAppLoader/container-manager.ts +0 -202
- package/generators/micro-react/templates/packages/shared-styles/README.md +0 -124
- package/generators/micro-react/templates/packages/shared-styles/arco-design-mobile-override.less +0 -91
- package/generators/micro-react/templates/packages/shared-styles/arco-override.less +0 -119
- package/generators/micro-react/templates/packages/shared-styles/index.d.ts +0 -44
- package/generators/micro-react/templates/packages/shared-styles/index.less +0 -13
- package/generators/micro-react/templates/packages/shared-styles/package.json +0 -30
- package/generators/micro-react/templates/packages/shared-styles/theme-inject.less +0 -10
- package/generators/micro-react/templates/packages/shared-styles/themes/dark/custom-var.less +0 -290
- package/generators/micro-react/templates/packages/shared-styles/themes/normal/custom-var.less +0 -269
- package/generators/micro-react/templates/packages/shared-styles/variables-only.less +0 -433
- package/generators/micro-react/templates/packages/shared-styles/variables.less +0 -452
|
@@ -1,202 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 微应用容器管理器
|
|
3
|
-
*
|
|
4
|
-
* 核心策略:
|
|
5
|
-
* 1. 容器在 document.body 中创建,与 React 生命周期解耦
|
|
6
|
-
* 2. 激活时移动到占位元素内,参与正常文档流
|
|
7
|
-
* 3. 停用时移回 body 并隐藏
|
|
8
|
-
*
|
|
9
|
-
* 这样既避免了 React unmount 时删除容器导致的竞态问题,
|
|
10
|
-
* 又能让容器在激活时参与正常的 CSS 布局。
|
|
11
|
-
*
|
|
12
|
-
* @see https://github.com/umijs/qiankun/issues/2845
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import type { MicroApp } from 'qiankun';
|
|
16
|
-
|
|
17
|
-
// ============================================================================
|
|
18
|
-
// 类型定义
|
|
19
|
-
// ============================================================================
|
|
20
|
-
|
|
21
|
-
type ContainerStatus = 'active' | 'hidden' | 'pending-delete';
|
|
22
|
-
|
|
23
|
-
interface ContainerEntry {
|
|
24
|
-
container: HTMLElement;
|
|
25
|
-
microApp: MicroApp | null;
|
|
26
|
-
status: ContainerStatus;
|
|
27
|
-
deleteTimer: ReturnType<typeof setTimeout> | null;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// ============================================================================
|
|
31
|
-
// 常量
|
|
32
|
-
// ============================================================================
|
|
33
|
-
|
|
34
|
-
/** 容器删除延迟(毫秒)- 给 qiankun 足够时间完成清理 */
|
|
35
|
-
const DELETE_DELAY = 5000;
|
|
36
|
-
|
|
37
|
-
/** CSS 类名 */
|
|
38
|
-
const CSS_CLASS = {
|
|
39
|
-
base: 'micro-app-container-managed',
|
|
40
|
-
hidden: 'micro-app-container-managed--hidden',
|
|
41
|
-
active: 'micro-app-container-managed--active',
|
|
42
|
-
} as const;
|
|
43
|
-
|
|
44
|
-
// ============================================================================
|
|
45
|
-
// 状态
|
|
46
|
-
// ============================================================================
|
|
47
|
-
|
|
48
|
-
const containers = new Map<string, ContainerEntry>();
|
|
49
|
-
|
|
50
|
-
// ============================================================================
|
|
51
|
-
// 私有方法
|
|
52
|
-
// ============================================================================
|
|
53
|
-
|
|
54
|
-
function createContainer(appName: string): HTMLElement {
|
|
55
|
-
const container = document.createElement('div');
|
|
56
|
-
container.id = `micro-app-${appName}`;
|
|
57
|
-
container.className = `${CSS_CLASS.base} ${CSS_CLASS.hidden}`;
|
|
58
|
-
document.body.appendChild(container);
|
|
59
|
-
return container;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// ============================================================================
|
|
63
|
-
// 公开 API
|
|
64
|
-
// ============================================================================
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* 获取或创建容器
|
|
68
|
-
*/
|
|
69
|
-
export function getContainer(appName: string): HTMLElement {
|
|
70
|
-
let entry = containers.get(appName);
|
|
71
|
-
|
|
72
|
-
if (entry) {
|
|
73
|
-
// 取消待删除的计时器(容器被复用)
|
|
74
|
-
if (entry.deleteTimer) {
|
|
75
|
-
clearTimeout(entry.deleteTimer);
|
|
76
|
-
entry.deleteTimer = null;
|
|
77
|
-
}
|
|
78
|
-
entry.status = 'hidden';
|
|
79
|
-
return entry.container;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// 创建新容器
|
|
83
|
-
const container = createContainer(appName);
|
|
84
|
-
entry = {
|
|
85
|
-
container,
|
|
86
|
-
microApp: null,
|
|
87
|
-
status: 'hidden',
|
|
88
|
-
deleteTimer: null,
|
|
89
|
-
};
|
|
90
|
-
containers.set(appName, entry);
|
|
91
|
-
|
|
92
|
-
return container;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* 激活容器:移动到占位元素内,参与正常文档流
|
|
97
|
-
*/
|
|
98
|
-
export function activateContainer(appName: string, target: HTMLElement): void {
|
|
99
|
-
const entry = containers.get(appName);
|
|
100
|
-
if (!entry) return;
|
|
101
|
-
|
|
102
|
-
const { container } = entry;
|
|
103
|
-
|
|
104
|
-
// 移动容器到占位元素内(参与文档流)
|
|
105
|
-
target.appendChild(container);
|
|
106
|
-
|
|
107
|
-
// 切换样式
|
|
108
|
-
container.classList.remove(CSS_CLASS.hidden);
|
|
109
|
-
container.classList.add(CSS_CLASS.active);
|
|
110
|
-
|
|
111
|
-
entry.status = 'active';
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* 停用容器:移回 body 并隐藏
|
|
116
|
-
*/
|
|
117
|
-
export function deactivateContainer(appName: string): void {
|
|
118
|
-
const entry = containers.get(appName);
|
|
119
|
-
if (!entry) return;
|
|
120
|
-
|
|
121
|
-
const { container } = entry;
|
|
122
|
-
|
|
123
|
-
// 移回 body(脱离 React 树)
|
|
124
|
-
document.body.appendChild(container);
|
|
125
|
-
|
|
126
|
-
// 切换样式
|
|
127
|
-
container.classList.remove(CSS_CLASS.active);
|
|
128
|
-
container.classList.add(CSS_CLASS.hidden);
|
|
129
|
-
|
|
130
|
-
entry.status = 'hidden';
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* 设置微应用实例
|
|
135
|
-
*/
|
|
136
|
-
export function setMicroApp(appName: string, microApp: MicroApp): void {
|
|
137
|
-
const entry = containers.get(appName);
|
|
138
|
-
if (entry) {
|
|
139
|
-
entry.microApp = microApp;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* 获取微应用实例
|
|
145
|
-
*/
|
|
146
|
-
export function getMicroApp(appName: string): MicroApp | null {
|
|
147
|
-
return containers.get(appName)?.microApp ?? null;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* 安全卸载微应用并安排容器延迟删除
|
|
152
|
-
*/
|
|
153
|
-
export async function unmountApp(appName: string): Promise<void> {
|
|
154
|
-
const entry = containers.get(appName);
|
|
155
|
-
if (!entry) return;
|
|
156
|
-
|
|
157
|
-
const { microApp } = entry;
|
|
158
|
-
|
|
159
|
-
if (microApp) {
|
|
160
|
-
entry.microApp = null;
|
|
161
|
-
|
|
162
|
-
// 等待各阶段完成再卸载
|
|
163
|
-
try {
|
|
164
|
-
await microApp.loadPromise;
|
|
165
|
-
await microApp.bootstrapPromise;
|
|
166
|
-
await microApp.mountPromise;
|
|
167
|
-
} catch {
|
|
168
|
-
// 忽略
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
try {
|
|
172
|
-
await microApp.unmount();
|
|
173
|
-
} catch {
|
|
174
|
-
// 忽略
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// 安排延迟删除
|
|
179
|
-
if (!entry.deleteTimer) {
|
|
180
|
-
entry.status = 'pending-delete';
|
|
181
|
-
entry.deleteTimer = setTimeout(() => {
|
|
182
|
-
deleteContainer(appName);
|
|
183
|
-
}, DELETE_DELAY);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* 删除容器
|
|
189
|
-
*/
|
|
190
|
-
function deleteContainer(appName: string): void {
|
|
191
|
-
const entry = containers.get(appName);
|
|
192
|
-
if (!entry) return;
|
|
193
|
-
|
|
194
|
-
// 只删除 pending-delete 状态的容器(未被重新激活)
|
|
195
|
-
if (entry.status === 'pending-delete') {
|
|
196
|
-
entry.container.remove();
|
|
197
|
-
containers.delete(appName);
|
|
198
|
-
} else {
|
|
199
|
-
// 容器被重新激活了,清除计时器引用
|
|
200
|
-
entry.deleteTimer = null;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
# <%= packageScope %>/shared-styles
|
|
2
|
-
|
|
3
|
-
共享样式包 - 主题变量、CSS Variables、Less 变量。
|
|
4
|
-
|
|
5
|
-
## 功能
|
|
6
|
-
|
|
7
|
-
- 🎨 **主题系统**:亮色/暗黑主题 CSS 变量
|
|
8
|
-
- 📦 **Less 变量**:封装 CSS 变量的 Less 变量,提供编辑器提示
|
|
9
|
-
- 🔗 **Arco Design 覆盖**:品牌色映射到 Arco Design 变量
|
|
10
|
-
|
|
11
|
-
## 安装
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# 在应用的 package.json 中添加依赖
|
|
15
|
-
"dependencies": {
|
|
16
|
-
"<%= packageScope %>/shared-styles": "workspace:*"
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
# 然后运行
|
|
20
|
-
pnpm install
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## 使用方式
|
|
24
|
-
|
|
25
|
-
### 方式 1:主应用 - 导入全部
|
|
26
|
-
|
|
27
|
-
在主应用(layout)的 `global.less` 中导入入口文件:
|
|
28
|
-
|
|
29
|
-
```less
|
|
30
|
-
@import '<%= packageScope %>/shared-styles';
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
这将导入:
|
|
34
|
-
- 亮色主题 CSS 变量定义
|
|
35
|
-
- 暗黑主题 CSS 变量定义
|
|
36
|
-
- Arco Design 变量覆盖
|
|
37
|
-
- Less 变量定义
|
|
38
|
-
|
|
39
|
-
### 方式 2:子应用 - 仅导入 Less 变量(推荐)⭐
|
|
40
|
-
|
|
41
|
-
**子应用使用此方式避免重复打包 CSS 变量定义:**
|
|
42
|
-
|
|
43
|
-
```less
|
|
44
|
-
@import '<%= packageScope %>/shared-styles/variables-only';
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
这将只导入 Less 变量,不包含 CSS 变量定义(约减少 5-10KB)。
|
|
48
|
-
CSS 变量由主应用注入到 `body` 上,子应用自动继承。
|
|
49
|
-
|
|
50
|
-
### 方式 3:在组件样式中使用变量
|
|
51
|
-
|
|
52
|
-
```less
|
|
53
|
-
// 子应用组件中
|
|
54
|
-
@import '<%= packageScope %>/shared-styles/variables-only';
|
|
55
|
-
|
|
56
|
-
.my-component {
|
|
57
|
-
background-color: @color-fill-1;
|
|
58
|
-
color: @color-text-2;
|
|
59
|
-
border: 1px solid @color-border-2;
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## 文件结构
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
packages/shared-styles/
|
|
67
|
-
├── index.less # 入口文件,导入全部(主应用用)
|
|
68
|
-
├── variables-only.less # 仅 Less 变量(子应用 global.less 用)⭐
|
|
69
|
-
├── theme-inject.less # 主题注入(子应用独立运行时用)⭐
|
|
70
|
-
├── variables.less # Less 变量 + 主题导入
|
|
71
|
-
├── arco-override.less # Arco Design 变量覆盖
|
|
72
|
-
└── themes/
|
|
73
|
-
├── normal/
|
|
74
|
-
│ └── custom-var.less # 亮色主题 CSS 变量
|
|
75
|
-
└── dark/
|
|
76
|
-
└── custom-var.less # 暗黑主题 CSS 变量
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## 主要变量
|
|
80
|
-
|
|
81
|
-
### 品牌色
|
|
82
|
-
| 变量 | 说明 |
|
|
83
|
-
|------|------|
|
|
84
|
-
| `@Brand1-1` ~ `@Brand1-7` | 品牌主色系列 |
|
|
85
|
-
| `@Brand2-1` ~ `@Brand2-7` | 品牌辅助色系列 |
|
|
86
|
-
|
|
87
|
-
### 中性色
|
|
88
|
-
| 变量 | 说明 |
|
|
89
|
-
|------|------|
|
|
90
|
-
| `@color-text-1` ~ `@color-text-5` | 文字颜色 |
|
|
91
|
-
| `@color-fill-1` ~ `@color-fill-5` | 填充颜色 |
|
|
92
|
-
| `@color-border-1` ~ `@color-border-4` | 边框颜色 |
|
|
93
|
-
|
|
94
|
-
### 功能色
|
|
95
|
-
| 变量 | 说明 |
|
|
96
|
-
|------|------|
|
|
97
|
-
| `@Success-1` ~ `@Success-7` | 成功状态色 |
|
|
98
|
-
| `@Warning-1` ~ `@Warning-7` | 警告状态色 |
|
|
99
|
-
| `@Danger-1` ~ `@Danger-7` | 危险状态色 |
|
|
100
|
-
|
|
101
|
-
## 微前端子应用配置
|
|
102
|
-
|
|
103
|
-
> 详细配置指南请参考 [主题色切换文档 - 子应用适配](../../apps/layout/docs/feature-主题色切换.md#微前端子应用主题适配)
|
|
104
|
-
|
|
105
|
-
**快速配置:**
|
|
106
|
-
|
|
107
|
-
```less
|
|
108
|
-
// global.less - 仅导入 Less 变量
|
|
109
|
-
@import '<%= packageScope %>/shared-styles/variables-only';
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
```typescript
|
|
113
|
-
// app.tsx - 开发环境条件注入(避免生产打包主题)
|
|
114
|
-
if (process.env.NODE_ENV === 'development') {
|
|
115
|
-
if (typeof window !== 'undefined' && !window.__POWERED_BY_QIANKUN__) {
|
|
116
|
-
import('./styles/theme.less');
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
## 相关文档
|
|
122
|
-
|
|
123
|
-
- [主题色切换](../../apps/layout/docs/feature-主题色切换.md) - 主题系统详解与子应用适配
|
|
124
|
-
- [微前端模式](../../apps/layout/docs/feature-微前端模式.md) - qiankun 架构说明
|
package/generators/micro-react/templates/packages/shared-styles/arco-design-mobile-override.less
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
@import "./variables.less";
|
|
2
|
-
|
|
3
|
-
/*
|
|
4
|
-
|
|
5
|
-
以下注释变量参考:
|
|
6
|
-
@see https://github.com/arco-design/arco-design-mobile/blob/4d8aa4656fb18a5490d56677a31255fd48ed2b24/packages/arcodesign/tokens/app/arcodesign/default/index.less#L7
|
|
7
|
-
|
|
8
|
-
@background-color: #FFFFFF;
|
|
9
|
-
@dark-background-color: #17171A;
|
|
10
|
-
@container-background-color: #FFFFFF;
|
|
11
|
-
@dark-container-background-color: #232324;
|
|
12
|
-
@card-background-color: #F7F8FA;
|
|
13
|
-
@dark-card-background-color: hsla(0, 0%, 100%, 0.08);
|
|
14
|
-
@font-color: #1d2129;
|
|
15
|
-
@dark-font-color: #f6f6f6;
|
|
16
|
-
@sub-font-color: #4e5969;
|
|
17
|
-
@dark-sub-font-color: #c5c5c5;
|
|
18
|
-
@sub-info-font-color: #86909c;
|
|
19
|
-
@dark-sub-info-font-color: #929293;
|
|
20
|
-
@line-color: #e5e6eb;
|
|
21
|
-
@dark-line-color: #484849;
|
|
22
|
-
@lighter-line-color: #f2f3f5;
|
|
23
|
-
@dark-lighter-line-color: #2e2e30;
|
|
24
|
-
@primary-color: #165DFF;
|
|
25
|
-
@dark-primary-color: #3C7EFF;
|
|
26
|
-
@primary-disabled-color: #94BFFF;
|
|
27
|
-
@dark-primary-disabled-color: #0E32A6;
|
|
28
|
-
@lighter-primary-color: #E8F3FF;
|
|
29
|
-
@dark-lighter-primary-color: #000D4D;
|
|
30
|
-
@danger-color: #F53F3F;
|
|
31
|
-
@dark-danger-color: #F76965;
|
|
32
|
-
@warning-color: #FF7D00;
|
|
33
|
-
@dark-warning-color: #FF9626;
|
|
34
|
-
@success-color: #00B42A;
|
|
35
|
-
@dark-success-color: #27C346;
|
|
36
|
-
@disabled-color: #c9cdd4;
|
|
37
|
-
@dark-disabled-color: #5f5f60;
|
|
38
|
-
@mask-background: rgba(0, 0, 0, 0.6);
|
|
39
|
-
@mask-content-color: #FFFFFF;
|
|
40
|
-
@dark-mask-content-color: rgba(255, 255, 255, 0.9);
|
|
41
|
-
@mask-content-background: #FFFFFF;
|
|
42
|
-
@dark-mask-content-background: #2A2A2B;
|
|
43
|
-
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
:root {
|
|
47
|
-
--background-color: @color-text-5;
|
|
48
|
-
--dark-background-color: @color-text-1;
|
|
49
|
-
--container-background-color: @color-text-5;
|
|
50
|
-
--dark-container-background-color: @color-text-5;
|
|
51
|
-
--card-background-color: @color-text-5;
|
|
52
|
-
--dark-card-background-color: @color-text-1;
|
|
53
|
-
--font-color: @color-text-2;
|
|
54
|
-
--dark-font-color: @color-text-2;
|
|
55
|
-
// --sub-font-color
|
|
56
|
-
// --dark-sub-font-color
|
|
57
|
-
// --sub-info-font-color
|
|
58
|
-
// --dark-sub-info-font-color
|
|
59
|
-
--line-color: @color-border-2;
|
|
60
|
-
--dark-line-color: @color-border-2;
|
|
61
|
-
// --lighter-line-color
|
|
62
|
-
// --dark-lighter-line-color
|
|
63
|
-
--primary-color: @Brand1-6;
|
|
64
|
-
--dark-primary-color: @Brand1-6;
|
|
65
|
-
--primary-disabled-color: @Brand1-3;
|
|
66
|
-
--dark-primary-disabled-color: @Brand1-3;
|
|
67
|
-
// --lighter-primary-color
|
|
68
|
-
--dark-lighter-primary-color: @color-text-1; // TODO: 设计稿里面亮色主题下这里是用 color-text-5 看起来怪怪的,暂时用 color-text-1 代替
|
|
69
|
-
--danger-color: @Danger-6;
|
|
70
|
-
--dark-danger-color: @Danger-6;
|
|
71
|
-
--warning-color: @Warning-6;
|
|
72
|
-
--dark-warning-color: @Warning-6;
|
|
73
|
-
--success-color: @Success-6;
|
|
74
|
-
--dark-success-color: @Success-6;
|
|
75
|
-
--disabled-color: @color-fill-3;
|
|
76
|
-
--dark-disabled-color: @color-fill-3;
|
|
77
|
-
// --mask-background
|
|
78
|
-
--mask-content-color: @color-text-5;
|
|
79
|
-
--dark-mask-content-color: @color-text-1;
|
|
80
|
-
--mask-content-background: @color-text-5;
|
|
81
|
-
--dark-mask-content-background: @color-text-5;
|
|
82
|
-
|
|
83
|
-
--toast-background: @color-text-1;
|
|
84
|
-
&.dark {
|
|
85
|
-
--toast-background: @color-text-3;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
--button-radius: @border-radius-lg;
|
|
89
|
-
--toast-border-radius: @border-radius-lg;
|
|
90
|
-
--dark-toast-text-color: @color-text-5;
|
|
91
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
// ==================== Arco Design 变量覆盖 ====================
|
|
2
|
-
// 将 custom-var.less 中定义的 brand1-x 变量覆盖到 Arco Design 的 primary 和 link 变量
|
|
3
|
-
// 参考文档:https://arco.design/react/docs/token
|
|
4
|
-
//
|
|
5
|
-
// 注意:使用属性选择器提高优先级(特异性 0,1,1 > Arco 的 0,0,1)
|
|
6
|
-
// 确保覆盖 arco.css 中的默认蓝色主题变量
|
|
7
|
-
// body:not([arco-theme]) 匹配亮色主题,body[arco-theme='dark'] 匹配暗色主题
|
|
8
|
-
|
|
9
|
-
body:not([arco-theme]),
|
|
10
|
-
body[arco-theme='dark'] {
|
|
11
|
-
// ==================== Primary 颜色覆盖 ====================
|
|
12
|
-
// 将 Brand1-x 映射到 primary-x,使用 CSS 变量引用(RGB 三分量格式)
|
|
13
|
-
--primary-1: var(--Brand1-1, 242 235 255);
|
|
14
|
-
--primary-2: var(--Brand1-2, 220 198 255);
|
|
15
|
-
--primary-3: var(--Brand1-3, 195 163 255);
|
|
16
|
-
--primary-4: var(--Brand1-4, 169 129 255);
|
|
17
|
-
--primary-5: var(--Brand1-5, 140 94 255);
|
|
18
|
-
--primary-6: var(--Brand1-6, 110 60 255);
|
|
19
|
-
--primary-7: var(--Brand1-7, 75 37 210);
|
|
20
|
-
|
|
21
|
-
// ==================== Link 颜色覆盖 ====================
|
|
22
|
-
// 将 Brand1-x 映射到 link-x,使用 CSS 变量引用(RGB 三分量格式)
|
|
23
|
-
--link-1: var(--Brand1-1, 242 235 255);
|
|
24
|
-
--link-2: var(--Brand1-2, 220 198 255);
|
|
25
|
-
--link-3: var(--Brand1-3, 195 163 255);
|
|
26
|
-
--link-4: var(--Brand1-4, 169 129 255);
|
|
27
|
-
--link-5: var(--Brand1-5, 140 94 255);
|
|
28
|
-
--link-6: var(--Brand1-6, 110 60 255);
|
|
29
|
-
--link-7: var(--Brand1-7, 75 37 210);
|
|
30
|
-
|
|
31
|
-
// ==================== Success 颜色覆盖 ====================
|
|
32
|
-
// 将 Success-x 映射到 success-x,使用 CSS 变量引用(RGB 三分量格式)
|
|
33
|
-
--success-1: var(--Success-1, 232 255 234);
|
|
34
|
-
--success-2: var(--Success-2, 175 240 181);
|
|
35
|
-
--success-3: var(--Success-3, 123 225 136);
|
|
36
|
-
--success-5: var(--Success-5, 35 195 67);
|
|
37
|
-
--success-6: var(--Success-6, 0 180 42);
|
|
38
|
-
--success-7: var(--Success-7, 0 154 41);
|
|
39
|
-
|
|
40
|
-
// ==================== Warning 颜色覆盖 ====================
|
|
41
|
-
// 将 Warning-x 映射到 warning-x,使用 CSS 变量引用(RGB 三分量格式)
|
|
42
|
-
--warning-1: var(--Warning-1, 255 247 232);
|
|
43
|
-
--warning-2: var(--Warning-2, 255 228 186);
|
|
44
|
-
--warning-3: var(--Warning-3, 255 207 139);
|
|
45
|
-
--warning-5: var(--Warning-5, 255 154 46);
|
|
46
|
-
--warning-6: var(--Warning-6, 255 125 0);
|
|
47
|
-
--warning-7: var(--Warning-7, 255 154 46);
|
|
48
|
-
|
|
49
|
-
// ==================== Danger 颜色覆盖 ====================
|
|
50
|
-
// 将 Danger-x 映射到 danger-x,使用 CSS 变量引用(RGB 三分量格式)
|
|
51
|
-
--danger-1: var(--Danger-1, 255 236 232);
|
|
52
|
-
--danger-2: var(--Danger-2, 253 205 197);
|
|
53
|
-
--danger-3: var(--Danger-3, 251 172 163);
|
|
54
|
-
--danger-5: var(--Danger-5, 247 101 96);
|
|
55
|
-
--danger-6: var(--Danger-6, 245 63 63);
|
|
56
|
-
--danger-7: var(--Danger-7, 203 38 52);
|
|
57
|
-
|
|
58
|
-
// ==================== Border radius ====================
|
|
59
|
-
// 全部圆角都设置为8px
|
|
60
|
-
--border-radius-small: 8px;
|
|
61
|
-
--border-radius-medium: 8px;
|
|
62
|
-
--border-radius-large: 8px;
|
|
63
|
-
--color-bg-1: var(--color-text-5);
|
|
64
|
-
--color-bg-2: var(--color-text-5);
|
|
65
|
-
--color-bg-3: var(--color-text-5);
|
|
66
|
-
--color-bg-4: var(--color-text-5);
|
|
67
|
-
--color-bg-5: var(--color-text-5);
|
|
68
|
-
--color-neutral-1: var(--color-fill-1);
|
|
69
|
-
--color-neutral-2: var(--color-fill-2);
|
|
70
|
-
--color-neutral-3: var(--color-fill-3);
|
|
71
|
-
--color-neutral-4: var(--color-fill-4);
|
|
72
|
-
--color-neutral-5: var(--color-fill-5);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.arco-drawer .arco-drawer-close-icon,
|
|
76
|
-
.arco-modal .arco-modal-close-icon {
|
|
77
|
-
font-size: 16px;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.arco-checkbox-mask {
|
|
81
|
-
border-radius: 2px;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.arco-tree-node {
|
|
85
|
-
border-radius: var(--border-radius-large);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.arco-btn-primary:not(.arco-btn-disabled) {
|
|
89
|
-
background-color: rgb(var(--Brand1-6));
|
|
90
|
-
color: white;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* 自定义滚动条样式
|
|
95
|
-
* @see https: //jira-vywrajy.micoworld.net/browse/MP-630
|
|
96
|
-
*/
|
|
97
|
-
.scrollbar-style() {
|
|
98
|
-
&::-webkit-scrollbar {
|
|
99
|
-
/* 滚动条宽度。必须指定宽度后,才能指定背景颜色 */
|
|
100
|
-
width: 4px;
|
|
101
|
-
height: 4px;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/* 滚动条轨道 */
|
|
105
|
-
// *::-webkit-scrollbar-track {
|
|
106
|
-
// background: @color-text-5;
|
|
107
|
-
// border-radius: @border-radius-sm;
|
|
108
|
-
// }
|
|
109
|
-
|
|
110
|
-
/* 滚动条滑块 */
|
|
111
|
-
&::-webkit-scrollbar-thumb {
|
|
112
|
-
background: var(--color-fill-4);
|
|
113
|
-
border-radius: 4px;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.arco-table-layout-fixed .arco-table-content-inner {
|
|
118
|
-
.scrollbar-style();
|
|
119
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* <%= packageScope %>/shared-styles 类型声明
|
|
3
|
-
* 这些模块导出 Less 样式文件,无需具体类型导出
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
declare module '<%= packageScope %>/shared-styles' {
|
|
7
|
-
const content: void;
|
|
8
|
-
export default content;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
declare module '<%= packageScope %>/shared-styles/variables' {
|
|
12
|
-
const content: void;
|
|
13
|
-
export default content;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
declare module '<%= packageScope %>/shared-styles/variables-only' {
|
|
17
|
-
const content: void;
|
|
18
|
-
export default content;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
declare module '<%= packageScope %>/shared-styles/theme-inject' {
|
|
22
|
-
const content: void;
|
|
23
|
-
export default content;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
declare module '<%= packageScope %>/shared-styles/themes/normal' {
|
|
27
|
-
const content: void;
|
|
28
|
-
export default content;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
declare module '<%= packageScope %>/shared-styles/themes/dark' {
|
|
32
|
-
const content: void;
|
|
33
|
-
export default content;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
declare module '<%= packageScope %>/shared-styles/arco-override' {
|
|
37
|
-
const content: void;
|
|
38
|
-
export default content;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
declare module '<%= packageScope %>/shared-styles/arco-design-mobile-override' {
|
|
42
|
-
const content: void;
|
|
43
|
-
export default content;
|
|
44
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// ==================== 共享样式入口 ====================
|
|
2
|
-
// 此文件作为 <%= packageScope %>/shared-styles 包的入口
|
|
3
|
-
// 导入此文件即可获取所有主题变量和 Less 变量
|
|
4
|
-
|
|
5
|
-
// 导入主题 CSS 变量(亮色 + 暗黑)
|
|
6
|
-
@import './themes/normal/custom-var.less';
|
|
7
|
-
@import './themes/dark/custom-var.less';
|
|
8
|
-
|
|
9
|
-
// 导入 Arco Design 变量覆盖
|
|
10
|
-
@import './arco-override.less';
|
|
11
|
-
|
|
12
|
-
// 导入 Less 变量定义
|
|
13
|
-
@import './variables.less';
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "<%= packageScope %>/shared-styles",
|
|
3
|
-
"version": "0.0.1",
|
|
4
|
-
"private": true,
|
|
5
|
-
"description": "共享样式 - 主题变量、CSS Variables、Less 变量",
|
|
6
|
-
"main": "index.less",
|
|
7
|
-
"types": "index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": "./index.less",
|
|
10
|
-
"./variables": "./variables.less",
|
|
11
|
-
"./variables-only": "./variables-only.less",
|
|
12
|
-
"./theme-inject": "./theme-inject.less",
|
|
13
|
-
"./themes/normal": "./themes/normal/custom-var.less",
|
|
14
|
-
"./themes/dark": "./themes/dark/custom-var.less",
|
|
15
|
-
"./arco-override": "./arco-override.less",
|
|
16
|
-
"./arco-design-mobile-override": "./arco-design-mobile-override.less"
|
|
17
|
-
},
|
|
18
|
-
"files": [
|
|
19
|
-
"themes/",
|
|
20
|
-
"*.less"
|
|
21
|
-
],
|
|
22
|
-
"keywords": [
|
|
23
|
-
"theme",
|
|
24
|
-
"styles",
|
|
25
|
-
"less",
|
|
26
|
-
"css-variables",
|
|
27
|
-
"mico"
|
|
28
|
-
],
|
|
29
|
-
"author": "<%= author %>"
|
|
30
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
// ==================== 主题注入文件 ====================
|
|
2
|
-
// 仅用于子应用独立运行时注入主题 CSS 变量
|
|
3
|
-
// 作为微前端子应用运行时,不需要导入此文件(主应用已注入)
|
|
4
|
-
//
|
|
5
|
-
// 使用场景:子应用独立 dev 预览
|
|
6
|
-
|
|
7
|
-
@import './themes/normal/custom-var.less';
|
|
8
|
-
@import './themes/dark/custom-var.less';
|
|
9
|
-
@import './arco-override.less';
|
|
10
|
-
|