@4399ywkf/cli 1.0.8 → 1.0.10

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 (96) hide show
  1. package/dist/templates/AntdStaticMethods/index.tsx +20 -0
  2. package/dist/templates/AppTheme.tsx +136 -0
  3. package/dist/templates/DIRECTORY_STRUCTURE.md +141 -0
  4. package/dist/templates/GlobalProvider/AppTheme.tsx +136 -0
  5. package/dist/templates/GlobalProvider/Locale.tsx +84 -0
  6. package/dist/templates/GlobalProvider/Query.tsx +12 -0
  7. package/dist/templates/GlobalProvider/StyleRegistry.tsx +9 -0
  8. package/dist/templates/GlobalProvider/index.tsx +23 -0
  9. package/dist/templates/Locale.tsx +55 -56
  10. package/dist/templates/Query.tsx +12 -0
  11. package/dist/templates/StyleRegistry.tsx +9 -0
  12. package/dist/templates/analyzeUnusedKeys.ts +506 -0
  13. package/dist/templates/app/.i18nrc.js +57 -0
  14. package/dist/templates/app/config/jwt/index.ts +2 -1
  15. package/dist/templates/app/docs/DIRECTORY_STRUCTURE.md +141 -0
  16. package/dist/templates/app/docs/glossary.md +11 -0
  17. package/dist/templates/app/package.json.tpl +7 -15
  18. package/dist/templates/app/scripts/i18nWorkflow/analyzeUnusedKeys.ts +506 -0
  19. package/dist/templates/app/scripts/i18nWorkflow/cleanUnusedKeys.ts +344 -0
  20. package/dist/templates/app/scripts/i18nWorkflow/const.ts +18 -0
  21. package/dist/templates/app/scripts/i18nWorkflow/flattenLocaleKeys.ts +139 -0
  22. package/dist/templates/app/scripts/i18nWorkflow/genDefaultLocale.ts +19 -0
  23. package/dist/templates/app/scripts/i18nWorkflow/genDiff.ts +49 -0
  24. package/dist/templates/app/scripts/i18nWorkflow/i18nConfig.ts +7 -0
  25. package/dist/templates/app/scripts/i18nWorkflow/index.ts +11 -0
  26. package/dist/templates/app/scripts/i18nWorkflow/protectedPatterns.ts +91 -0
  27. package/dist/templates/app/scripts/i18nWorkflow/utils.ts +76 -0
  28. package/dist/templates/app/src/components/AntdStaticMethods/index.tsx +20 -0
  29. package/dist/templates/app/src/index.tsx +0 -4
  30. package/dist/templates/app/src/layout/GlobalProvider/AppTheme.tsx +136 -0
  31. package/dist/templates/app/src/layout/GlobalProvider/Locale.tsx +84 -0
  32. package/dist/templates/app/src/layout/GlobalProvider/Query.tsx +12 -0
  33. package/dist/templates/app/src/layout/GlobalProvider/StyleRegistry.tsx +9 -0
  34. package/dist/templates/app/src/layout/GlobalProvider/index.tsx +23 -0
  35. package/dist/templates/app/src/locales/utils.ts +23 -0
  36. package/dist/templates/app/src/pages/base/index.tsx +170 -79
  37. package/dist/templates/app/src/routes.tsx +2 -2
  38. package/dist/templates/app/tsconfig.json +19 -3
  39. package/dist/templates/base/index.tsx +170 -79
  40. package/dist/templates/cleanUnusedKeys.ts +344 -0
  41. package/dist/templates/components/AntdStaticMethods/index.tsx +20 -0
  42. package/dist/templates/config/jwt/index.ts +2 -1
  43. package/dist/templates/const.ts +18 -0
  44. package/dist/templates/docs/DIRECTORY_STRUCTURE.md +141 -0
  45. package/dist/templates/docs/glossary.md +11 -0
  46. package/dist/templates/flattenLocaleKeys.ts +139 -0
  47. package/dist/templates/genDefaultLocale.ts +19 -0
  48. package/dist/templates/genDiff.ts +49 -0
  49. package/dist/templates/glossary.md +11 -0
  50. package/dist/templates/i18nConfig.ts +7 -0
  51. package/dist/templates/i18nWorkflow/analyzeUnusedKeys.ts +506 -0
  52. package/dist/templates/i18nWorkflow/cleanUnusedKeys.ts +344 -0
  53. package/dist/templates/i18nWorkflow/const.ts +18 -0
  54. package/dist/templates/i18nWorkflow/flattenLocaleKeys.ts +139 -0
  55. package/dist/templates/i18nWorkflow/genDefaultLocale.ts +19 -0
  56. package/dist/templates/i18nWorkflow/genDiff.ts +49 -0
  57. package/dist/templates/i18nWorkflow/i18nConfig.ts +7 -0
  58. package/dist/templates/i18nWorkflow/index.ts +11 -0
  59. package/dist/templates/i18nWorkflow/protectedPatterns.ts +91 -0
  60. package/dist/templates/i18nWorkflow/utils.ts +76 -0
  61. package/dist/templates/index.tsx +170 -79
  62. package/dist/templates/jwt/index.ts +2 -1
  63. package/dist/templates/layout/GlobalProvider/AppTheme.tsx +136 -0
  64. package/dist/templates/layout/GlobalProvider/Locale.tsx +84 -0
  65. package/dist/templates/layout/GlobalProvider/Query.tsx +12 -0
  66. package/dist/templates/layout/GlobalProvider/StyleRegistry.tsx +9 -0
  67. package/dist/templates/layout/GlobalProvider/index.tsx +23 -0
  68. package/dist/templates/locales/utils.ts +23 -0
  69. package/dist/templates/package.json.tpl +7 -15
  70. package/dist/templates/pages/base/index.tsx +170 -79
  71. package/dist/templates/protectedPatterns.ts +91 -0
  72. package/dist/templates/routes.tsx +2 -2
  73. package/dist/templates/scripts/i18nWorkflow/analyzeUnusedKeys.ts +506 -0
  74. package/dist/templates/scripts/i18nWorkflow/cleanUnusedKeys.ts +344 -0
  75. package/dist/templates/scripts/i18nWorkflow/const.ts +18 -0
  76. package/dist/templates/scripts/i18nWorkflow/flattenLocaleKeys.ts +139 -0
  77. package/dist/templates/scripts/i18nWorkflow/genDefaultLocale.ts +19 -0
  78. package/dist/templates/scripts/i18nWorkflow/genDiff.ts +49 -0
  79. package/dist/templates/scripts/i18nWorkflow/i18nConfig.ts +7 -0
  80. package/dist/templates/scripts/i18nWorkflow/index.ts +11 -0
  81. package/dist/templates/scripts/i18nWorkflow/protectedPatterns.ts +91 -0
  82. package/dist/templates/scripts/i18nWorkflow/utils.ts +76 -0
  83. package/dist/templates/src/components/AntdStaticMethods/index.tsx +20 -0
  84. package/dist/templates/src/index.tsx +0 -4
  85. package/dist/templates/src/layout/GlobalProvider/AppTheme.tsx +136 -0
  86. package/dist/templates/src/layout/GlobalProvider/Locale.tsx +84 -0
  87. package/dist/templates/src/layout/GlobalProvider/Query.tsx +12 -0
  88. package/dist/templates/src/layout/GlobalProvider/StyleRegistry.tsx +9 -0
  89. package/dist/templates/src/layout/GlobalProvider/index.tsx +23 -0
  90. package/dist/templates/src/locales/utils.ts +23 -0
  91. package/dist/templates/src/pages/base/index.tsx +170 -79
  92. package/dist/templates/src/routes.tsx +2 -2
  93. package/dist/templates/tsconfig.json +19 -3
  94. package/dist/templates/type.ts +23 -24
  95. package/dist/templates/utils.ts +23 -0
  96. package/package.json +19 -21
@@ -11,14 +11,117 @@ import {
11
11
  import React from "react";
12
12
  import { createStyles } from "antd-style";
13
13
 
14
- const { Title, Paragraph, Text, Link } = Typography;
14
+ const { Title, Paragraph, Text } = Typography;
15
15
 
16
- const useStyles = createStyles(({ css, token }) => ({
17
- app: css`
16
+ const px = (value: number | string) =>
17
+ typeof value === "number" ? `${value}px` : value;
18
+
19
+ const useStyles = createStyles(({ token, css }) => ({
20
+ root: css`
18
21
  width: 100%;
19
- height: 100%;
22
+ min-height: 100vh;
23
+ padding: ${px(token.paddingLG)};
24
+ background: linear-gradient(180deg, ${token.colorFillTertiary}, ${token.colorPrimaryHover});
20
25
  overflow: auto;
21
26
  `,
27
+ container: css`
28
+ margin: 0 auto;
29
+ max-width: 960px;
30
+ `,
31
+ hero: css`
32
+ text-align: center;
33
+ margin-bottom: ${px(token.marginLG)};
34
+ `,
35
+ heroIcon: css`
36
+ font-size: 3.5rem;
37
+ color: ${token.colorPrimary};
38
+ animation: bounce 1.2s infinite alternate;
39
+
40
+ @keyframes bounce {
41
+ from {
42
+ transform: translateY(0);
43
+ }
44
+ to {
45
+ transform: translateY(-6px);
46
+ }
47
+ }
48
+ `,
49
+ tagSpace: css`
50
+ margin-top: ${px(token.marginMD)};
51
+ `,
52
+ featuresGrid: css`
53
+ display: grid;
54
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
55
+ gap: ${px(token.marginSM)};
56
+ margin-bottom: ${px(token.marginLG)};
57
+ `,
58
+ featureCard: css`
59
+ text-align: center;
60
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
61
+
62
+ &:hover {
63
+ transform: translateY(-6px);
64
+ box-shadow: ${token.boxShadowSecondary};
65
+ }
66
+ `,
67
+ quickLinkGrid: css`
68
+ display: grid;
69
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
70
+ gap: ${px(token.marginSM)};
71
+ `,
72
+ quickLink: css`
73
+ padding: ${px(token.paddingMD)};
74
+ border-radius: ${px(token.borderRadiusLG)};
75
+ background: ${token.colorBgContainer};
76
+ cursor: pointer;
77
+ transition: background 0.2s ease;
78
+
79
+ &:hover {
80
+ background: ${token.colorBgElevated};
81
+ }
82
+ `,
83
+ footerActions: css`
84
+ margin-top: ${px(token.marginMD)};
85
+ text-align: center;
86
+ `,
87
+ cardTitle: css`
88
+ display: inline-flex;
89
+ align-items: center;
90
+ gap: ${px(token.marginXS)};
91
+ font-size: ${px(token.fontSizeHeading4)};
92
+ `,
93
+ codeBlock: css`
94
+ margin-top: ${px(token.marginXS)};
95
+ padding: ${px(token.paddingSM)};
96
+ background: ${token.colorFillAlter};
97
+ border-radius: ${px(token.borderRadiusLG)};
98
+ font-family: ${token.fontFamilyCode};
99
+ font-size: ${px(token.fontSizeSM)};
100
+ `,
101
+ stepLabel: css`
102
+ font-size: ${px(token.fontSizeBase)};
103
+ `,
104
+ quickLinkLabel: css`
105
+ font-size: ${px(token.fontSizeHeading2)};
106
+ margin-bottom: ${px(token.marginXS)};
107
+ `,
108
+ quickLinkDescription: css`
109
+ color: ${token.colorTextTertiary};
110
+ `,
111
+ panelCard: css`
112
+ margin-bottom: ${px(token.marginLG)};
113
+ background: ${token.colorBgElevated};
114
+ `,
115
+ featureIcon: css`
116
+ margin-bottom: ${px(token.marginMD)};
117
+ `,
118
+ footerParagraph: css`
119
+ margin-top: ${px(token.marginMD)};
120
+ color: ${token.colorTextTertiary};
121
+ `,
122
+ textCenterCard: css`
123
+ text-align: center;
124
+ `,
22
125
  }));
23
126
 
24
127
  export default function BasePage() {
@@ -28,17 +131,17 @@ export default function BasePage() {
28
131
 
29
132
  const features = [
30
133
  {
31
- icon: <ThunderboltOutlined className="text-4xl text-blue-500" />,
134
+ icon: <ThunderboltOutlined className={styles.heroIcon} />,
32
135
  title: "Rspack 构建",
33
136
  description: "基于 Rspack 的极速构建体验,开发效率翻倍",
34
137
  },
35
138
  {
36
- icon: <BulbOutlined className="text-4xl text-yellow-500" />,
139
+ icon: <BulbOutlined className={styles.heroIcon} />,
37
140
  title: "React 19",
38
141
  description: "使用最新的 React 19 特性,享受并发渲染",
39
142
  },
40
143
  {
41
- icon: <SettingOutlined className="text-4xl text-green-500" />,
144
+ icon: <SettingOutlined className={styles.heroIcon} />,
42
145
  title: "TypeScript",
43
146
  description: "完整的 TypeScript 支持,类型安全有保障",
44
147
  },
@@ -52,107 +155,94 @@ export default function BasePage() {
52
155
  ];
53
156
 
54
157
  return (
55
- <div
56
- className={cx(
57
- styles.app,
58
- "min-h-screen bg-gradient-to-br from-blue-50 to-indigo-50 dark:from-gray-900 dark:to-gray-800 p-8"
59
- )}
60
- >
61
- <div className="max-w-6xl mx-auto">
158
+ <div className={cx(styles.root)}>
159
+ <div className={styles.container}>
62
160
  <Flex vertical gap={12}>
63
- {/* 头部欢迎区域 */}
64
- <div className="text-center mb-12 animate-fade-in">
65
- <div className="inline-block mb-4">
66
- <RocketOutlined className="text-6xl text-blue-500 animate-bounce" />
161
+ <section className={styles.hero}>
162
+ <div>
163
+ <RocketOutlined className={styles.heroIcon} />
67
164
  </div>
68
- <Title level={1} className="!mb-4">
165
+ <Title level={1} style={{ marginBottom: 16 }}>
69
166
  🎉 恭喜!项目创建成功
70
167
  </Title>
71
- <Paragraph className="text-lg text-gray-600 dark:text-gray-300">
168
+ <Paragraph>
72
169
  你的项目已经准备就绪,现在可以开始开发了
73
170
  </Paragraph>
74
- <Space size="middle" className="mt-4">
171
+ <Space size="middle" className={styles.tagSpace}>
75
172
  <Tag color="blue">React 19</Tag>
76
173
  <Tag color="green">TypeScript</Tag>
77
174
  <Tag color="orange">Rspack</Tag>
78
175
  <Tag color="purple">Ant Design</Tag>
79
176
  <Tag color="cyan">Tailwind CSS</Tag>
80
177
  </Space>
81
- </div>
178
+ </section>
82
179
 
83
- {/* 特性卡片 */}
84
- <div className="grid grid-cols-1 md:grid-cols-3 gap-6 mb-12">
180
+ <div className={styles.featuresGrid}>
85
181
  {features.map((feature, index) => (
86
182
  <Card
87
183
  key={index}
88
184
  hoverable
89
- className="text-center transition-all duration-300 hover:shadow-xl dark:bg-gray-800"
185
+ className={cx(styles.featureCard)}
186
+ bodyStyle={{ padding: 24 }}
90
187
  >
91
- <div className="mb-4">{feature.icon}</div>
188
+ <div className={styles.featureIcon}>{feature.icon}</div>
92
189
  <Title level={4}>{feature.title}</Title>
93
- <Paragraph className="text-gray-600 dark:text-gray-400">
94
- {feature.description}
95
- </Paragraph>
190
+ <Paragraph type="secondary">{feature.description}</Paragraph>
96
191
  </Card>
97
192
  ))}
98
193
  </div>
99
194
 
100
- {/* 快速开始 */}
101
195
  <Card
102
196
  title={
103
- <span className="text-xl">
104
- <BookOutlined className="mr-2" />
197
+ <span className={styles.cardTitle}>
198
+ <BookOutlined />
105
199
  快速开始
106
200
  </span>
107
201
  }
108
- className="mb-8 dark:bg-gray-800"
202
+ className={styles.panelCard}
109
203
  >
110
- <Space direction="vertical" size="large" className="w-full">
204
+ <Space direction="vertical" size="large">
111
205
  <div>
112
- <Text strong className="text-base">
206
+ <Text strong className={styles.stepLabel}>
113
207
  1. 安装依赖
114
208
  </Text>
115
- <div className="mt-2 p-4 bg-gray-100 dark:bg-gray-900 rounded-lg font-mono text-sm">
209
+ <div className={styles.codeBlock}>
116
210
  <code>pnpm install</code>
117
211
  </div>
118
212
  </div>
119
213
  <div>
120
- <Text strong className="text-base">
214
+ <Text strong className={styles.stepLabel}>
121
215
  2. 启动开发服务器
122
216
  </Text>
123
- <div className="mt-2 p-4 bg-gray-100 dark:bg-gray-900 rounded-lg font-mono text-sm">
217
+ <div className={styles.codeBlock}>
124
218
  <code>pnpm dev</code>
125
219
  </div>
126
220
  </div>
127
221
  <div>
128
- <Text strong className="text-base">
222
+ <Text strong className={styles.stepLabel}>
129
223
  3. 构建生产版本
130
224
  </Text>
131
- <div className="mt-2 p-4 bg-gray-100 dark:bg-gray-900 rounded-lg font-mono text-sm">
225
+ <div className={styles.codeBlock}>
132
226
  <code>pnpm build</code>
133
227
  </div>
134
228
  </div>
135
229
  </Space>
136
230
  </Card>
137
231
 
138
- {/* 快捷链接 */}
139
232
  <Card
140
233
  title={
141
- <span className="text-xl">
142
- <GithubOutlined className="mr-2" />
234
+ <span className={styles.cardTitle}>
235
+ <GithubOutlined />
143
236
  快捷链接
144
237
  </span>
145
238
  }
146
- className="mb-8 dark:bg-gray-800"
239
+ className={styles.panelCard}
147
240
  >
148
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4">
241
+ <div className={styles.quickLinkGrid}>
149
242
  {quickLinks.map((link, index) => (
150
- <div
151
- key={index}
152
- className="p-4 bg-gray-50 dark:bg-gray-900 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700 cursor-pointer transition-colors"
153
- >
154
- <div className="text-2xl mb-2">{link.label}</div>
155
- <Text className="text-sm text-gray-600 dark:text-gray-400">
243
+ <div key={index} className={styles.quickLink}>
244
+ <div className={styles.quickLinkLabel}>{link.label}</div>
245
+ <Text className={styles.quickLinkDescription}>
156
246
  {link.description}
157
247
  </Text>
158
248
  </div>
@@ -160,34 +250,35 @@ export default function BasePage() {
160
250
  </div>
161
251
  </Card>
162
252
 
163
- {/* 底部操作区 */}
164
- <Card className="text-center dark:bg-gray-800">
165
- <Space size="large" wrap>
166
- <Button
167
- type="primary"
168
- size="large"
169
- icon={<RocketOutlined />}
170
- onClick={() => window.open("https://ant.design", "_blank")}
171
- >
172
- 查看 Ant Design 文档
173
- </Button>
174
- <Button
175
- size="large"
176
- icon={<BookOutlined />}
177
- onClick={() => window.open("https://react.dev", "_blank")}
178
- >
179
- React 文档
180
- </Button>
181
- <Button
182
- size="large"
183
- onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
184
- >
185
- 切换主题 ({theme === "dark" ? "🌙 暗色" : "☀️ 亮色"})
186
- </Button>
187
- </Space>
188
- <Paragraph className="mt-6 text-gray-500 dark:text-gray-400">
189
- 祝你开发愉快!如有问题,请查阅文档或联系技术支持 💪
190
- </Paragraph>
253
+ <Card className={cx(styles.panelCard, styles.textCenterCard)}>
254
+ <div className={styles.footerActions}>
255
+ <Space size="large" wrap>
256
+ <Button
257
+ type="primary"
258
+ size="large"
259
+ icon={<RocketOutlined />}
260
+ onClick={() => window.open("https://ant.design", "_blank")}
261
+ >
262
+ 查看 Ant Design 文档
263
+ </Button>
264
+ <Button
265
+ size="large"
266
+ icon={<BookOutlined />}
267
+ onClick={() => window.open("https://react.dev", "_blank")}
268
+ >
269
+ React 文档
270
+ </Button>
271
+ <Button
272
+ size="large"
273
+ onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
274
+ >
275
+ 切换主题 ({theme === "dark" ? "🌙 暗色" : "☀️ 亮色"})
276
+ </Button>
277
+ </Space>
278
+ <Paragraph className={styles.footerParagraph}>
279
+ 祝你开发愉快!如有问题,请查阅文档或联系技术支持 💪
280
+ </Paragraph>
281
+ </div>
191
282
  </Card>
192
283
  </Flex>
193
284
  </div>
@@ -1,13 +1,13 @@
1
1
  import React, { lazy } from "react";
2
2
  import { createBrowserRouter, Navigate } from "react-router";
3
- import MainContentWrap from "@/layout/MainContentWrap";
3
+ import GlobalProvider from "@/layout/GlobalProvider";
4
4
 
5
5
  export const createRouter = (basename?: string) => {
6
6
  return createBrowserRouter(
7
7
  [
8
8
  {
9
9
  path: "",
10
- element: <MainContentWrap />,
10
+ element: <GlobalProvider />,
11
11
  children: [
12
12
  {
13
13
  path: "/",
@@ -11,7 +11,7 @@
11
11
  "strict": true, // 开启所有严格的类型检查
12
12
  "skipLibCheck": true, // 用来控制是否在编译时进行库文件检查的
13
13
  "target": "es5", // 目标语言的版本
14
- "jsx": "react", // 控制如何在 JavaScript 文件中发出 JSX 构造。这只影响以.tsx files 开头的 JS 文件的输出
14
+ "jsx": "react-jsx", // 控制如何在 JavaScript 文件中发出 JSX 构造。这只影响以.tsx files 开头的 JS 文件的输出
15
15
  "lib": ["es5", "dom", "dom.iterable", "esnext"], // TypeScript 包含内置 JS API 的一组默认类型定义(如Math),以及浏览器环境中找到的内容的类型定义(如document)
16
16
  "paths": {
17
17
  "@/*": ["./src/*"],
@@ -22,6 +22,22 @@
22
22
  }, // 将导入重新映射到相对于baseUrlif 集或 tsconfig 文件本身的查找位置
23
23
  "types": ["jest", "node", "@testing-library/jest-dom"]
24
24
  },
25
- "exclude": ["**/node_modules", "**/examples", "**/dist", "**/fixtures", "**/*.test.ts", "**/*.e2e.ts", "**/templates", "ui"], // 指定解析时应跳过的文件名或模式数组include。
26
- "include": ["./src/**/*", "./store/**/*", "./react-app-env.d.ts", "config/router", "**/*.test.ts", "**/*.test.tsx"] // 指定要包含在程序中的文件名或模式的数组。这些文件名是相对于包含该tsconfig.json文件的目录进行解析的。
25
+ "exclude": [
26
+ "**/node_modules",
27
+ "**/examples",
28
+ "**/dist",
29
+ "**/fixtures",
30
+ "**/*.test.ts",
31
+ "**/*.e2e.ts",
32
+ "**/templates",
33
+ "ui"
34
+ ], // 指定解析时应跳过的文件名或模式数组include。
35
+ "include": [
36
+ "./src/**/*",
37
+ "./store/**/*",
38
+ "./react-app-env.d.ts",
39
+ "config/router",
40
+ "**/*.test.ts",
41
+ "**/*.test.tsx"
42
+ ] // 指定要包含在程序中的文件名或模式的数组。这些文件名是相对于包含该tsconfig.json文件的目录进行解析的。
27
43
  }