@moluoxixi/create-app 2.0.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.
Files changed (215) hide show
  1. package/LICENSE.txt +21 -0
  2. package/README.md +129 -0
  3. package/dist/commands/create.d.ts +10 -0
  4. package/dist/commands/create.d.ts.map +1 -0
  5. package/dist/commands/create.js +89 -0
  6. package/dist/commands/create.js.map +1 -0
  7. package/dist/commands/index.d.ts +5 -0
  8. package/dist/commands/index.d.ts.map +1 -0
  9. package/dist/commands/index.js +5 -0
  10. package/dist/commands/index.js.map +1 -0
  11. package/dist/generators/index.d.ts +7 -0
  12. package/dist/generators/index.d.ts.map +1 -0
  13. package/dist/generators/index.js +7 -0
  14. package/dist/generators/index.js.map +1 -0
  15. package/dist/generators/project.d.ts +11 -0
  16. package/dist/generators/project.d.ts.map +1 -0
  17. package/dist/generators/project.js +26 -0
  18. package/dist/generators/project.js.map +1 -0
  19. package/dist/generators/react.d.ts +10 -0
  20. package/dist/generators/react.d.ts.map +1 -0
  21. package/dist/generators/react.js +39 -0
  22. package/dist/generators/react.js.map +1 -0
  23. package/dist/generators/vue.d.ts +10 -0
  24. package/dist/generators/vue.d.ts.map +1 -0
  25. package/dist/generators/vue.js +40 -0
  26. package/dist/generators/vue.js.map +1 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +26 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/test.d.ts +6 -0
  32. package/dist/test.d.ts.map +1 -0
  33. package/dist/test.js +364 -0
  34. package/dist/test.js.map +1 -0
  35. package/dist/types/ejs.d.ts +11 -0
  36. package/dist/types/ejs.d.ts.map +1 -0
  37. package/dist/types/ejs.js +5 -0
  38. package/dist/types/ejs.js.map +1 -0
  39. package/dist/types/features.d.ts +26 -0
  40. package/dist/types/features.d.ts.map +1 -0
  41. package/dist/types/features.js +41 -0
  42. package/dist/types/features.js.map +1 -0
  43. package/dist/types/index.d.ts +59 -0
  44. package/dist/types/index.d.ts.map +1 -0
  45. package/dist/types/index.js +8 -0
  46. package/dist/types/index.js.map +1 -0
  47. package/dist/types/viteConfig.d.ts +17 -0
  48. package/dist/types/viteConfig.d.ts.map +1 -0
  49. package/dist/types/viteConfig.js +6 -0
  50. package/dist/types/viteConfig.js.map +1 -0
  51. package/dist/utils/deepMerge.d.ts +8 -0
  52. package/dist/utils/deepMerge.d.ts.map +1 -0
  53. package/dist/utils/deepMerge.js +33 -0
  54. package/dist/utils/deepMerge.js.map +1 -0
  55. package/dist/utils/ejs.d.ts +19 -0
  56. package/dist/utils/ejs.d.ts.map +1 -0
  57. package/dist/utils/ejs.js +30 -0
  58. package/dist/utils/ejs.js.map +1 -0
  59. package/dist/utils/file.d.ts +70 -0
  60. package/dist/utils/file.d.ts.map +1 -0
  61. package/dist/utils/file.js +119 -0
  62. package/dist/utils/file.js.map +1 -0
  63. package/dist/utils/index.d.ts +12 -0
  64. package/dist/utils/index.d.ts.map +1 -0
  65. package/dist/utils/index.js +12 -0
  66. package/dist/utils/index.js.map +1 -0
  67. package/dist/utils/install.d.ts +17 -0
  68. package/dist/utils/install.d.ts.map +1 -0
  69. package/dist/utils/install.js +37 -0
  70. package/dist/utils/install.js.map +1 -0
  71. package/dist/utils/prompts.d.ts +16 -0
  72. package/dist/utils/prompts.d.ts.map +1 -0
  73. package/dist/utils/prompts.js +180 -0
  74. package/dist/utils/prompts.js.map +1 -0
  75. package/dist/utils/renderFeatures.d.ts +18 -0
  76. package/dist/utils/renderFeatures.d.ts.map +1 -0
  77. package/dist/utils/renderFeatures.js +72 -0
  78. package/dist/utils/renderFeatures.js.map +1 -0
  79. package/dist/utils/renderTemplate.d.ts +6 -0
  80. package/dist/utils/renderTemplate.d.ts.map +1 -0
  81. package/dist/utils/renderTemplate.js +102 -0
  82. package/dist/utils/renderTemplate.js.map +1 -0
  83. package/dist/utils/sortDependencies.d.ts +6 -0
  84. package/dist/utils/sortDependencies.d.ts.map +1 -0
  85. package/dist/utils/sortDependencies.js +22 -0
  86. package/dist/utils/sortDependencies.js.map +1 -0
  87. package/dist/utils/viteConfigRender.d.ts +19 -0
  88. package/dist/utils/viteConfigRender.d.ts.map +1 -0
  89. package/dist/utils/viteConfigRender.js +180 -0
  90. package/dist/utils/viteConfigRender.js.map +1 -0
  91. package/package.json +93 -0
  92. package/templates/common/base/.env +7 -0
  93. package/templates/common/base/.env.development +5 -0
  94. package/templates/common/base/.env.production +5 -0
  95. package/templates/common/base/package.json +56 -0
  96. package/templates/common/base/pnpm-workspace.yaml +37 -0
  97. package/templates/common/base/scripts/build.mts +31 -0
  98. package/templates/common/base/src/apis/index.ts +8 -0
  99. package/templates/common/base/src/apis/request.ts +43 -0
  100. package/templates/common/base/src/apis/services/example.ts +40 -0
  101. package/templates/common/base/src/apis/services/user.ts +23 -0
  102. package/templates/common/base/src/apis/types/common.ts +28 -0
  103. package/templates/common/base/src/apis/types/example.ts +18 -0
  104. package/templates/common/base/src/apis/types/index.ts +7 -0
  105. package/templates/common/base/src/apis/types/user.ts +24 -0
  106. package/templates/common/base/src/assets/fonts/index.css +7 -0
  107. package/templates/common/base/src/assets/styles/base.scss +72 -0
  108. package/templates/common/base/src/assets/styles/custom.scss +7 -0
  109. package/templates/common/base/src/assets/styles/tailwind.scss +6 -0
  110. package/templates/common/base/src/constants/index.ts +29 -0
  111. package/templates/common/base/src/locales/lang/en.ts +30 -0
  112. package/templates/common/base/src/locales/lang/es.ts +30 -0
  113. package/templates/common/base/src/locales/lang/zh.ts +30 -0
  114. package/templates/common/base/src/utils/index.ts +83 -0
  115. package/templates/common/features/husky/.cz-config.cjs +35 -0
  116. package/templates/common/features/husky/.husky/commit-msg +9 -0
  117. package/templates/common/features/husky/.husky/install.mjs +6 -0
  118. package/templates/common/features/husky/.husky/pre-commit +4 -0
  119. package/templates/common/features/husky/commitlint.config.ts +32 -0
  120. package/templates/common/features/husky/package.json +28 -0
  121. package/templates/common/features/husky/pnpm-workspace.yaml +9 -0
  122. package/templates/react/base/env.d.ts +19 -0
  123. package/templates/react/base/index.html +14 -0
  124. package/templates/react/base/package.json +15 -0
  125. package/templates/react/base/pnpm-workspace.yaml +9 -0
  126. package/templates/react/base/src/App.tsx +18 -0
  127. package/templates/react/base/src/assets/styles/main.scss +8 -0
  128. package/templates/react/base/src/main.tsx.ejs +39 -0
  129. package/templates/react/base/src/pages/about/index.tsx +14 -0
  130. package/templates/react/base/src/pages/home/index.tsx +14 -0
  131. package/templates/react/base/src/router/index.tsx.ejs +28 -0
  132. package/templates/react/base/src/stores/user.ts +39 -0
  133. package/templates/react/base/tsconfig.app.json +17 -0
  134. package/templates/react/base/tsconfig.base.json +23 -0
  135. package/templates/react/base/tsconfig.json +12 -0
  136. package/templates/react/base/tsconfig.node.json +15 -0
  137. package/templates/react/base/vite.config.ts +52 -0
  138. package/templates/react/features/ant-design/package.json +7 -0
  139. package/templates/react/features/ant-design/pnpm-workspace.yaml +5 -0
  140. package/templates/react/features/eslint/eslint.config.ts +12 -0
  141. package/templates/react/features/eslint/package.json +7 -0
  142. package/templates/react/features/eslint/pnpm-workspace.yaml +6 -0
  143. package/templates/react/features/i18n/package.json +7 -0
  144. package/templates/react/features/i18n/pnpm-workspace.yaml +5 -0
  145. package/templates/react/features/i18n/src/locales/index.ts +20 -0
  146. package/templates/react/features/manualRoutes/src/router/routes.tsx +21 -0
  147. package/templates/react/features/pageRoutes/package.json +6 -0
  148. package/templates/react/features/pageRoutes/pnpm-workspace.yaml +4 -0
  149. package/templates/react/features/pageRoutes/vite.config.data.ts +10 -0
  150. package/templates/react/features/router/package.json +5 -0
  151. package/templates/react/features/router/pnpm-workspace.yaml +3 -0
  152. package/templates/react/features/sentry/package.json +7 -0
  153. package/templates/react/features/sentry/pnpm-workspace.yaml +5 -0
  154. package/templates/react/features/sentry/src/utils/sentry.ts +30 -0
  155. package/templates/react/features/sentry/vite.config.data.ts +23 -0
  156. package/templates/react/features/zustand/package.json +5 -0
  157. package/templates/react/features/zustand/pnpm-workspace.yaml +3 -0
  158. package/templates/react/features/zustand/src/stores/user.ts +19 -0
  159. package/templates/react/features/zustand/src/types/stores.ts +15 -0
  160. package/templates/vue/base/env.d.ts +27 -0
  161. package/templates/vue/base/index.html +14 -0
  162. package/templates/vue/base/package.json +13 -0
  163. package/templates/vue/base/pnpm-workspace.yaml +6 -0
  164. package/templates/vue/base/src/App.vue +13 -0
  165. package/templates/vue/base/src/assets/styles/element/index.scss +27 -0
  166. package/templates/vue/base/src/assets/styles/main.scss +9 -0
  167. package/templates/vue/base/src/components/SubMenu/index.ts +9 -0
  168. package/templates/vue/base/src/components/SubMenu/src/_types/index.ts +6 -0
  169. package/templates/vue/base/src/components/SubMenu/src/_types/props.ts +11 -0
  170. package/templates/vue/base/src/components/SubMenu/src/index.vue +24 -0
  171. package/templates/vue/base/src/directives/index.ts +36 -0
  172. package/templates/vue/base/src/layouts/AntDesign.vue +86 -0
  173. package/templates/vue/base/src/layouts/element.vue +81 -0
  174. package/templates/vue/base/src/layouts/index.ts +7 -0
  175. package/templates/vue/base/src/main.ts.ejs +100 -0
  176. package/templates/vue/base/src/pages/about/index.vue +31 -0
  177. package/templates/vue/base/src/pages/home/index.vue +31 -0
  178. package/templates/vue/base/src/router/index.ts.ejs +39 -0
  179. package/templates/vue/base/src/stores/index.ts +16 -0
  180. package/templates/vue/base/src/stores/modules/system.ts +52 -0
  181. package/templates/vue/base/src/stores/modules/user.ts +48 -0
  182. package/templates/vue/base/tsconfig.app.json +17 -0
  183. package/templates/vue/base/tsconfig.base.json +23 -0
  184. package/templates/vue/base/tsconfig.json +12 -0
  185. package/templates/vue/base/tsconfig.node.json +15 -0
  186. package/templates/vue/base/vite.config.ts +53 -0
  187. package/templates/vue/features/ant-design-vue/package.json +7 -0
  188. package/templates/vue/features/ant-design-vue/pnpm-workspace.yaml +5 -0
  189. package/templates/vue/features/element-plus/package.json +7 -0
  190. package/templates/vue/features/element-plus/pnpm-workspace.yaml +5 -0
  191. package/templates/vue/features/element-plus/vite.config.data.ts +15 -0
  192. package/templates/vue/features/eslint/eslint.config.ts +12 -0
  193. package/templates/vue/features/eslint/package.json +7 -0
  194. package/templates/vue/features/eslint/pnpm-workspace.yaml +6 -0
  195. package/templates/vue/features/i18n/package.json +5 -0
  196. package/templates/vue/features/i18n/pnpm-workspace.yaml +3 -0
  197. package/templates/vue/features/i18n/src/locales/index.ts +16 -0
  198. package/templates/vue/features/manualRoutes/src/router/layout.vue +10 -0
  199. package/templates/vue/features/manualRoutes/src/router/routes.ts +27 -0
  200. package/templates/vue/features/pageRoutes/package.json +5 -0
  201. package/templates/vue/features/pageRoutes/pnpm-workspace.yaml +4 -0
  202. package/templates/vue/features/pageRoutes/vite.config.data.ts +9 -0
  203. package/templates/vue/features/pinia/package.json +6 -0
  204. package/templates/vue/features/pinia/pnpm-workspace.yaml +4 -0
  205. package/templates/vue/features/pinia/src/stores/index.ts +8 -0
  206. package/templates/vue/features/pinia/src/stores/user.ts +36 -0
  207. package/templates/vue/features/qiankun/package.json +5 -0
  208. package/templates/vue/features/qiankun/pnpm-workspace.yaml +3 -0
  209. package/templates/vue/features/qiankun/src/qiankun/index.ts +56 -0
  210. package/templates/vue/features/router/package.json +5 -0
  211. package/templates/vue/features/router/pnpm-workspace.yaml +3 -0
  212. package/templates/vue/features/sentry/package.json +6 -0
  213. package/templates/vue/features/sentry/pnpm-workspace.yaml +4 -0
  214. package/templates/vue/features/sentry/src/utils/sentry.ts +33 -0
  215. package/templates/vue/features/sentry/vite.config.data.ts +23 -0
package/dist/test.js ADDED
@@ -0,0 +1,364 @@
1
+ /**
2
+ * 测试脚本
3
+ * 生成验收样本并进行产物审计
4
+ */
5
+ import path from 'node:path';
6
+ import process from 'node:process';
7
+ import { fileURLToPath } from 'node:url';
8
+ import chalk from 'chalk';
9
+ import fs from 'fs-extra';
10
+ import { generateProject } from './generators/project';
11
+ const __filename = fileURLToPath(import.meta.url);
12
+ const __dirname = path.dirname(__filename);
13
+ /** 测试输出目录 */
14
+ const TEST_OUTPUT_DIR = path.resolve(__dirname, '../test');
15
+ /** 测试配置矩阵 */
16
+ const TEST_CONFIGS = [
17
+ // Vue 基础配置组合
18
+ {
19
+ name: 'vue-element-basic',
20
+ config: {
21
+ projectName: 'vue-element-basic',
22
+ description: 'Vue + Element Plus 基础项目',
23
+ author: 'test',
24
+ framework: 'vue',
25
+ uiLibrary: 'element-plus',
26
+ routeMode: 'manual',
27
+ i18n: true,
28
+ qiankun: false,
29
+ sentry: false,
30
+ eslint: true,
31
+ gitHooks: true,
32
+ packageManager: 'pnpm',
33
+ },
34
+ },
35
+ {
36
+ name: 'vue-element-full',
37
+ config: {
38
+ projectName: 'vue-element-full',
39
+ description: 'Vue + Element Plus 全量特性项目',
40
+ author: 'test',
41
+ framework: 'vue',
42
+ uiLibrary: 'element-plus',
43
+ routeMode: 'file-system',
44
+ i18n: true,
45
+ qiankun: true,
46
+ sentry: true,
47
+ eslint: true,
48
+ gitHooks: true,
49
+ packageManager: 'pnpm',
50
+ },
51
+ },
52
+ {
53
+ name: 'vue-antd-basic',
54
+ config: {
55
+ projectName: 'vue-antd-basic',
56
+ description: 'Vue + Ant Design Vue 基础项目',
57
+ author: 'test',
58
+ framework: 'vue',
59
+ uiLibrary: 'ant-design-vue',
60
+ routeMode: 'manual',
61
+ i18n: true,
62
+ qiankun: false,
63
+ sentry: false,
64
+ eslint: true,
65
+ gitHooks: true,
66
+ packageManager: 'pnpm',
67
+ },
68
+ },
69
+ {
70
+ name: 'vue-antd-minimal',
71
+ config: {
72
+ projectName: 'vue-antd-minimal',
73
+ description: 'Vue + Ant Design Vue 最小配置(无 i18n)',
74
+ author: 'test',
75
+ framework: 'vue',
76
+ uiLibrary: 'ant-design-vue',
77
+ routeMode: 'manual',
78
+ i18n: false,
79
+ qiankun: false,
80
+ sentry: false,
81
+ eslint: true,
82
+ gitHooks: true,
83
+ packageManager: 'pnpm',
84
+ },
85
+ },
86
+ {
87
+ name: 'vue-element-sentry-only',
88
+ config: {
89
+ projectName: 'vue-element-sentry-only',
90
+ description: 'Vue + Element Plus + Sentry(无其他特性)',
91
+ author: 'test',
92
+ framework: 'vue',
93
+ uiLibrary: 'element-plus',
94
+ routeMode: 'manual',
95
+ i18n: false,
96
+ qiankun: false,
97
+ sentry: true,
98
+ eslint: true,
99
+ gitHooks: true,
100
+ packageManager: 'pnpm',
101
+ },
102
+ },
103
+ {
104
+ name: 'vue-no-eslint-no-hooks',
105
+ config: {
106
+ projectName: 'vue-no-eslint-no-hooks',
107
+ description: 'Vue 项目(无 ESLint,无 Git Hooks)',
108
+ author: 'test',
109
+ framework: 'vue',
110
+ uiLibrary: 'element-plus',
111
+ routeMode: 'manual',
112
+ i18n: false,
113
+ qiankun: false,
114
+ sentry: false,
115
+ eslint: false,
116
+ gitHooks: false,
117
+ packageManager: 'pnpm',
118
+ },
119
+ },
120
+ // React 配置组合
121
+ {
122
+ name: 'react-antd-basic',
123
+ config: {
124
+ projectName: 'react-antd-basic',
125
+ description: 'React + Ant Design 基础项目',
126
+ author: 'test',
127
+ framework: 'react',
128
+ uiLibrary: 'ant-design',
129
+ routeMode: 'manual',
130
+ i18n: true,
131
+ qiankun: false,
132
+ sentry: false,
133
+ eslint: true,
134
+ gitHooks: true,
135
+ packageManager: 'pnpm',
136
+ },
137
+ },
138
+ {
139
+ name: 'react-antd-full',
140
+ config: {
141
+ projectName: 'react-antd-full',
142
+ description: 'React + Ant Design 全量特性项目',
143
+ author: 'test',
144
+ framework: 'react',
145
+ uiLibrary: 'ant-design',
146
+ routeMode: 'file-system',
147
+ i18n: true,
148
+ qiankun: false,
149
+ sentry: true,
150
+ eslint: true,
151
+ gitHooks: true,
152
+ packageManager: 'pnpm',
153
+ },
154
+ },
155
+ {
156
+ name: 'react-antd-minimal',
157
+ config: {
158
+ projectName: 'react-antd-minimal',
159
+ description: 'React + Ant Design 最小配置(无 i18n, 无 sentry)',
160
+ author: 'test',
161
+ framework: 'react',
162
+ uiLibrary: 'ant-design',
163
+ routeMode: 'manual',
164
+ i18n: false,
165
+ qiankun: false,
166
+ sentry: false,
167
+ eslint: true,
168
+ gitHooks: true,
169
+ packageManager: 'pnpm',
170
+ },
171
+ },
172
+ {
173
+ name: 'react-no-eslint-no-hooks',
174
+ config: {
175
+ projectName: 'react-no-eslint-no-hooks',
176
+ description: 'React 项目(无 ESLint,无 Git Hooks)',
177
+ author: 'test',
178
+ framework: 'react',
179
+ uiLibrary: 'ant-design',
180
+ routeMode: 'manual',
181
+ i18n: false,
182
+ qiankun: false,
183
+ sentry: false,
184
+ eslint: false,
185
+ gitHooks: false,
186
+ packageManager: 'pnpm',
187
+ },
188
+ },
189
+ ];
190
+ /**
191
+ * 生成测试项目
192
+ */
193
+ async function generateTestProjects() {
194
+ console.log(chalk.blue.bold('\n🧪 开始生成测试项目...\n'));
195
+ // 清理并创建测试目录
196
+ if (fs.existsSync(TEST_OUTPUT_DIR)) {
197
+ fs.removeSync(TEST_OUTPUT_DIR);
198
+ }
199
+ fs.ensureDirSync(TEST_OUTPUT_DIR);
200
+ for (const { name, config } of TEST_CONFIGS) {
201
+ console.log(chalk.cyan(`📦 生成 ${name}...`));
202
+ const fullConfig = {
203
+ projectName: config.projectName,
204
+ description: config.description,
205
+ author: config.author,
206
+ framework: config.framework,
207
+ uiLibrary: config.uiLibrary,
208
+ routeMode: config.routeMode,
209
+ router: config.router ?? true,
210
+ stateManagement: config.stateManagement ?? true,
211
+ i18n: config.i18n,
212
+ qiankun: config.qiankun,
213
+ sentry: config.sentry,
214
+ eslint: config.eslint,
215
+ gitHooks: config.gitHooks,
216
+ packageManager: config.packageManager,
217
+ targetDir: path.join(TEST_OUTPUT_DIR, name),
218
+ };
219
+ try {
220
+ await generateProject(fullConfig);
221
+ console.log(chalk.green(` ✅ ${name} 生成成功`));
222
+ }
223
+ catch (error) {
224
+ console.log(chalk.red(` ❌ ${name} 生成失败:`), error);
225
+ }
226
+ }
227
+ console.log(chalk.green.bold('\n✅ 测试项目生成完成!\n'));
228
+ }
229
+ /**
230
+ * 审计 @moluoxixi 依赖
231
+ */
232
+ async function auditMoluoxixiDeps() {
233
+ console.log(chalk.blue.bold('\n🔍 开始审计 @moluoxixi 依赖...\n'));
234
+ const requiredDeps = [
235
+ '@moluoxixi/vite-config',
236
+ '@moluoxixi/ajax-package',
237
+ ];
238
+ let hasError = false;
239
+ for (const { name, config } of TEST_CONFIGS) {
240
+ const projectDir = path.join(TEST_OUTPUT_DIR, name);
241
+ const packageJsonPath = path.join(projectDir, 'package.json');
242
+ const workspacePath = path.join(projectDir, 'pnpm-workspace.yaml');
243
+ console.log(chalk.cyan(`📋 检查 ${name}...`));
244
+ // 根据配置决定需要检查的依赖
245
+ const depsToCheck = [...requiredDeps];
246
+ if (config.eslint) {
247
+ depsToCheck.push('@moluoxixi/eslint-config');
248
+ }
249
+ // 检查 package.json
250
+ if (fs.existsSync(packageJsonPath)) {
251
+ const packageJson = fs.readJsonSync(packageJsonPath);
252
+ const allDeps = {
253
+ ...packageJson.dependencies,
254
+ ...packageJson.devDependencies,
255
+ };
256
+ for (const dep of depsToCheck) {
257
+ if (!allDeps[dep]) {
258
+ console.log(chalk.red(` ❌ package.json 缺少 ${dep}`));
259
+ hasError = true;
260
+ }
261
+ else {
262
+ console.log(chalk.green(` ✅ package.json 包含 ${dep}`));
263
+ }
264
+ }
265
+ }
266
+ else {
267
+ console.log(chalk.red(` ❌ package.json 不存在`));
268
+ hasError = true;
269
+ }
270
+ // 检查 pnpm-workspace.yaml
271
+ if (fs.existsSync(workspacePath)) {
272
+ const workspaceContent = fs.readFileSync(workspacePath, 'utf-8');
273
+ for (const dep of depsToCheck) {
274
+ if (!workspaceContent.includes(dep)) {
275
+ console.log(chalk.red(` ❌ pnpm-workspace.yaml 缺少 ${dep}`));
276
+ hasError = true;
277
+ }
278
+ else {
279
+ console.log(chalk.green(` ✅ pnpm-workspace.yaml 包含 ${dep}`));
280
+ }
281
+ }
282
+ }
283
+ else {
284
+ console.log(chalk.red(` ❌ pnpm-workspace.yaml 不存在`));
285
+ hasError = true;
286
+ }
287
+ // 检查可选特性文件
288
+ if (!config.eslint) {
289
+ const eslintConfig = path.join(projectDir, 'eslint.config.ts');
290
+ if (fs.existsSync(eslintConfig)) {
291
+ console.log(chalk.red(` ❌ 不应存在 eslint.config.ts(ESLint 已禁用)`));
292
+ hasError = true;
293
+ }
294
+ else {
295
+ console.log(chalk.green(` ✅ eslint.config.ts 已正确移除`));
296
+ }
297
+ }
298
+ if (!config.gitHooks) {
299
+ const huskyDir = path.join(projectDir, '.husky');
300
+ if (fs.existsSync(huskyDir)) {
301
+ console.log(chalk.red(` ❌ 不应存在 .husky/ 目录(Git Hooks 已禁用)`));
302
+ hasError = true;
303
+ }
304
+ else {
305
+ console.log(chalk.green(` ✅ .husky/ 目录已正确移除`));
306
+ }
307
+ }
308
+ console.log('');
309
+ }
310
+ if (hasError) {
311
+ console.log(chalk.red.bold('\n❌ 审计失败: 存在问题\n'));
312
+ process.exit(1);
313
+ }
314
+ else {
315
+ console.log(chalk.green.bold('\n✅ 审计通过: 所有检查项均通过\n'));
316
+ }
317
+ }
318
+ /**
319
+ * 显示文件树
320
+ */
321
+ async function showFileTrees() {
322
+ console.log(chalk.blue.bold('\n📂 项目文件树...\n'));
323
+ for (const { name } of TEST_CONFIGS) {
324
+ const projectDir = path.join(TEST_OUTPUT_DIR, name);
325
+ console.log(chalk.cyan(`\n${name}/`));
326
+ await printFileTree(projectDir, ' ');
327
+ }
328
+ }
329
+ /**
330
+ * 打印文件树
331
+ */
332
+ async function printFileTree(dir, indent) {
333
+ const items = fs.readdirSync(dir).sort();
334
+ for (const item of items) {
335
+ if (item === 'node_modules')
336
+ continue;
337
+ const itemPath = path.join(dir, item);
338
+ const stat = fs.statSync(itemPath);
339
+ if (stat.isDirectory()) {
340
+ console.log(chalk.gray(`${indent}📁 ${item}/`));
341
+ await printFileTree(itemPath, `${indent} `);
342
+ }
343
+ else {
344
+ console.log(chalk.gray(`${indent}📄 ${item}`));
345
+ }
346
+ }
347
+ }
348
+ /**
349
+ * 主函数
350
+ */
351
+ async function main() {
352
+ console.log(chalk.blue.bold(`\n${'='.repeat(60)}`));
353
+ console.log(chalk.blue.bold(' Vite CLI Next - 产物审计测试'));
354
+ console.log(chalk.blue.bold('='.repeat(60)));
355
+ // 1. 生成测试项目
356
+ await generateTestProjects();
357
+ // 2. 审计 @moluoxixi 依赖
358
+ await auditMoluoxixiDeps();
359
+ // 3. 显示文件树
360
+ await showFileTrees();
361
+ console.log(chalk.green.bold('\n✅ 全量产物审计完成!\n'));
362
+ }
363
+ main().catch(console.error);
364
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * EJS 模板相关类型定义
3
+ */
4
+ /**
5
+ * EJS 模板数据类型
6
+ * 用于渲染 EJS 模板时传递的数据对象
7
+ */
8
+ export interface EjsDataType {
9
+ [key: string]: unknown;
10
+ }
11
+ //# sourceMappingURL=ejs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ejs.d.ts","sourceRoot":"","sources":["../../src/types/ejs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * EJS 模板相关类型定义
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=ejs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ejs.js","sourceRoot":"","sources":["../../src/types/ejs.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * 特性配置定义
3
+ * 定义所有可用特性的 ID
4
+ */
5
+ /**
6
+ * @moluoxixi 核心依赖配置
7
+ * 这些依赖必须在所有项目中存在
8
+ */
9
+ export declare const MOLUOXIXI_DEPS: {
10
+ readonly '@moluoxixi/eslint-config': "latest";
11
+ readonly '@moluoxixi/vite-config': "latest";
12
+ readonly '@moluoxixi/ajax-package': "latest";
13
+ readonly '@moluoxixi/class-names': "latest";
14
+ readonly '@moluoxixi/css-module-global-root-plugin': "latest";
15
+ };
16
+ /**
17
+ * Vue 特性 ID
18
+ */
19
+ export declare const VUE_FEATURES: readonly ["router", "pinia", "eslint", "i18n", "sentry", "qiankun", "pageRoutes", "element-plus", "ant-design-vue"];
20
+ /**
21
+ * React 特性 ID
22
+ */
23
+ export declare const REACT_FEATURES: readonly ["router", "zustand", "eslint", "i18n", "sentry", "ant-design"];
24
+ export type VueFeatureId = typeof VUE_FEATURES[number];
25
+ export type ReactFeatureId = typeof REACT_FEATURES[number];
26
+ //# sourceMappingURL=features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/types/features.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,YAAY,qHAUf,CAAA;AAEV;;GAEG;AACH,eAAO,MAAM,cAAc,0EAOjB,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,MAAM,CAAC,CAAA;AACtD,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * 特性配置定义
3
+ * 定义所有可用特性的 ID
4
+ */
5
+ /**
6
+ * @moluoxixi 核心依赖配置
7
+ * 这些依赖必须在所有项目中存在
8
+ */
9
+ export const MOLUOXIXI_DEPS = {
10
+ '@moluoxixi/eslint-config': 'latest',
11
+ '@moluoxixi/vite-config': 'latest',
12
+ '@moluoxixi/ajax-package': 'latest',
13
+ '@moluoxixi/class-names': 'latest',
14
+ '@moluoxixi/css-module-global-root-plugin': 'latest',
15
+ };
16
+ /**
17
+ * Vue 特性 ID
18
+ */
19
+ export const VUE_FEATURES = [
20
+ 'router',
21
+ 'pinia',
22
+ 'eslint',
23
+ 'i18n',
24
+ 'sentry',
25
+ 'qiankun',
26
+ 'pageRoutes',
27
+ 'element-plus',
28
+ 'ant-design-vue',
29
+ ];
30
+ /**
31
+ * React 特性 ID
32
+ */
33
+ export const REACT_FEATURES = [
34
+ 'router',
35
+ 'zustand',
36
+ 'eslint',
37
+ 'i18n',
38
+ 'sentry',
39
+ 'ant-design',
40
+ ];
41
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/types/features.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,0BAA0B,EAAE,QAAQ;IACpC,wBAAwB,EAAE,QAAQ;IAClC,yBAAyB,EAAE,QAAQ;IACnC,wBAAwB,EAAE,QAAQ;IAClC,0CAA0C,EAAE,QAAQ;CAC5C,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,cAAc;IACd,gBAAgB;CACR,CAAA;AAEV;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,YAAY;CACJ,CAAA"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * CLI 类型定义
3
+ * 定义项目配置、模板层级等核心类型
4
+ */
5
+ export * from './ejs';
6
+ export * from './features';
7
+ export * from './viteConfig';
8
+ /**
9
+ * 框架类型
10
+ */
11
+ export type FrameworkType = 'vue' | 'react';
12
+ /**
13
+ * UI 库类型
14
+ */
15
+ export type UILibraryType = 'element-plus' | 'ant-design-vue' | 'ant-design';
16
+ /**
17
+ * 路由模式类型
18
+ */
19
+ export type RouteModeType = 'file-system' | 'manual';
20
+ /**
21
+ * 包管理器类型
22
+ */
23
+ export type PackageManagerType = 'pnpm' | 'npm' | 'yarn';
24
+ /**
25
+ * 项目配置接口
26
+ */
27
+ export interface ProjectConfigType {
28
+ /** 项目名称 */
29
+ projectName: string;
30
+ /** 项目描述 */
31
+ description: string;
32
+ /** 作者 */
33
+ author: string;
34
+ /** 框架类型 */
35
+ framework: FrameworkType;
36
+ /** UI 库 */
37
+ uiLibrary: UILibraryType;
38
+ /** 路由模式 */
39
+ routeMode: RouteModeType;
40
+ /** 是否启用路由 */
41
+ router: boolean;
42
+ /** 是否启用状态管理 (Vue: pinia, React: zustand) */
43
+ stateManagement: boolean;
44
+ /** 是否启用国际化 */
45
+ i18n: boolean;
46
+ /** 是否启用微前端支持 */
47
+ qiankun: boolean;
48
+ /** 是否启用错误监控 */
49
+ sentry: boolean;
50
+ /** 是否启用 ESLint */
51
+ eslint: boolean;
52
+ /** 是否启用 Git Hooks (husky + commitlint + lint-staged) */
53
+ gitHooks: boolean;
54
+ /** 包管理器 */
55
+ packageManager: PackageManagerType;
56
+ /** 目标目录 */
57
+ targetDir: string;
58
+ }
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,CAAA;AAE3C;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG,gBAAgB,GAAG,YAAY,CAAA;AAE5E;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAA;AAEpD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW;IACX,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS;IACT,MAAM,EAAE,MAAM,CAAA;IACd,WAAW;IACX,SAAS,EAAE,aAAa,CAAA;IACxB,WAAW;IACX,SAAS,EAAE,aAAa,CAAA;IACxB,WAAW;IACX,SAAS,EAAE,aAAa,CAAA;IACxB,aAAa;IACb,MAAM,EAAE,OAAO,CAAA;IACf,4CAA4C;IAC5C,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc;IACd,IAAI,EAAE,OAAO,CAAA;IACb,gBAAgB;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe;IACf,MAAM,EAAE,OAAO,CAAA;IACf,kBAAkB;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,wDAAwD;IACxD,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW;IACX,cAAc,EAAE,kBAAkB,CAAA;IAClC,WAAW;IACX,SAAS,EAAE,MAAM,CAAA;CAClB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CLI 类型定义
3
+ * 定义项目配置、模板层级等核心类型
4
+ */
5
+ export * from './ejs';
6
+ export * from './features';
7
+ export * from './viteConfig';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,OAAO,CAAA;AACrB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Vite 配置数据类型定义
3
+ * 用于 features 中的 vite.config.data.ts
4
+ */
5
+ export interface ViteConfigData {
6
+ /** 导入语句 */
7
+ imports?: string[];
8
+ /** ViteConfig 选项 */
9
+ options?: Record<string, unknown>;
10
+ /** 插件配置 */
11
+ plugins?: string[];
12
+ /** CSS 配置 */
13
+ css?: {
14
+ additionalData?: string;
15
+ };
16
+ }
17
+ //# sourceMappingURL=viteConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viteConfig.d.ts","sourceRoot":"","sources":["../../src/types/viteConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,aAAa;IACb,GAAG,CAAC,EAAE;QACJ,cAAc,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;CACF"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vite 配置数据类型定义
3
+ * 用于 features 中的 vite.config.data.ts
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=viteConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viteConfig.js","sourceRoot":"","sources":["../../src/types/viteConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 深度合并对象
3
+ * - 对象会递归合并
4
+ * - 数组会合并并去重
5
+ * - 基本类型后者覆盖前者
6
+ */
7
+ export declare function deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T;
8
+ //# sourceMappingURL=deepMerge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.d.ts","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GACjB,CAAC,CA6BH"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 深度合并对象
3
+ * - 对象会递归合并
4
+ * - 数组会合并并去重
5
+ * - 基本类型后者覆盖前者
6
+ */
7
+ export function deepMerge(target, source) {
8
+ const result = { ...target };
9
+ for (const key of Object.keys(source)) {
10
+ const targetValue = result[key];
11
+ const sourceValue = source[key];
12
+ if (sourceValue === undefined) {
13
+ continue;
14
+ }
15
+ if (isObject(targetValue) && isObject(sourceValue)) {
16
+ // 递归合并对象
17
+ result[key] = deepMerge(targetValue, sourceValue);
18
+ }
19
+ else if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
20
+ // 合并数组并去重
21
+ result[key] = [...new Set([...targetValue, ...sourceValue])];
22
+ }
23
+ else {
24
+ // 直接覆盖
25
+ result[key] = sourceValue;
26
+ }
27
+ }
28
+ return result;
29
+ }
30
+ function isObject(val) {
31
+ return val !== null && typeof val === 'object' && !Array.isArray(val);
32
+ }
33
+ //# sourceMappingURL=deepMerge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.js","sourceRoot":"","sources":["../../src/utils/deepMerge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACvB,MAAS,EACT,MAAkB;IAElB,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;IAE5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAmB,EAAE,CAAC;QACxD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAE/B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,SAAQ;QACV,CAAC;QAED,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACnD,SAAS;YACT,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,WAAsC,EACtC,WAAsC,CACzB,CAAA;QACjB,CAAC;aACI,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YAClE,UAAU;YACV,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC,CAAe,CAAA;QAC5E,CAAC;aACI,CAAC;YACJ,OAAO;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,WAAyB,CAAA;QACzC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;AACvE,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * EJS 模板渲染工具
3
+ */
4
+ import type { EjsDataType } from '../types';
5
+ /**
6
+ * 渲染 EJS 模板文件
7
+ * @param templatePath 模板文件路径
8
+ * @param data 模板数据
9
+ * @returns 渲染后的字符串内容
10
+ */
11
+ export declare function renderEjsFile(templatePath: string, data: EjsDataType): string;
12
+ /**
13
+ * 渲染 EJS 模板并写入目标文件
14
+ * @param templatePath 模板文件路径
15
+ * @param targetPath 目标文件路径
16
+ * @param data 模板数据
17
+ */
18
+ export declare function renderEjsToFile(templatePath: string, targetPath: string, data: EjsDataType): void;
19
+ //# sourceMappingURL=ejs.d.ts.map