feng3d-cli 0.0.4 → 0.0.5

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 (50) hide show
  1. package/README.md +0 -15
  2. package/bin/cli.js +135 -0
  3. package/dist/index.js +792 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.umd.cjs +792 -0
  6. package/dist/index.umd.cjs.map +1 -0
  7. package/{dist → lib}/commands/create.d.ts.map +1 -1
  8. package/{dist → lib}/commands/update.d.ts +1 -0
  9. package/{dist → lib}/commands/update.d.ts.map +1 -1
  10. package/{dist → lib}/index.d.ts +2 -1
  11. package/lib/index.d.ts.map +1 -0
  12. package/{dist → lib}/templates.d.ts +10 -12
  13. package/{dist → lib}/templates.d.ts.map +1 -1
  14. package/{dist → lib}/types/config.d.ts +2 -0
  15. package/{dist → lib}/types/config.d.ts.map +1 -1
  16. package/package.json +20 -22
  17. package/schemas/feng3d.schema.json +5 -0
  18. package/templates/.github/workflows/publish.yml +2 -8
  19. package/templates/feng3d.json +2 -1
  20. package/templates/gitignore +3 -0
  21. package/templates/scripts/postpublish.js +19 -0
  22. package/templates/scripts/prepublish.js +19 -0
  23. package/templates/vite.config.js +49 -0
  24. package/dist/cli.d.ts +0 -7
  25. package/dist/cli.d.ts.map +0 -1
  26. package/dist/cli.js +0 -108
  27. package/dist/cli.js.map +0 -1
  28. package/dist/commands/create.js +0 -125
  29. package/dist/commands/create.js.map +0 -1
  30. package/dist/commands/oss.js +0 -132
  31. package/dist/commands/oss.js.map +0 -1
  32. package/dist/commands/update.js +0 -482
  33. package/dist/commands/update.js.map +0 -1
  34. package/dist/eslint.d.ts +0 -236
  35. package/dist/eslint.d.ts.map +0 -1
  36. package/dist/eslint.js +0 -119
  37. package/dist/eslint.js.map +0 -1
  38. package/dist/index.d.ts.map +0 -1
  39. package/dist/templates.js +0 -151
  40. package/dist/templates.js.map +0 -1
  41. package/dist/types/config.js +0 -50
  42. package/dist/types/config.js.map +0 -1
  43. package/dist/versions.js +0 -60
  44. package/dist/versions.js.map +0 -1
  45. package/templates/vitest.config.ts +0 -8
  46. /package/{dist → lib}/commands/create.d.ts +0 -0
  47. /package/{dist → lib}/commands/oss.d.ts +0 -0
  48. /package/{dist → lib}/commands/oss.d.ts.map +0 -0
  49. /package/{dist → lib}/versions.d.ts +0 -0
  50. /package/{dist → lib}/versions.d.ts.map +0 -0
@@ -1,482 +0,0 @@
1
- /**
2
- * 更新项目规范命令
3
- */
4
- import fs from 'fs-extra';
5
- import path from 'path';
6
- import chalk from 'chalk';
7
- import { getDevDependencies, VERSIONS, } from '../versions.js';
8
- import { getGitignoreTemplate, getCursorrrulesTemplate, getEslintConfigTemplate, getPublishWorkflowTemplate, getPagesWorkflowTemplate, getPullRequestWorkflowTemplate, getFeng3dConfigTemplate, getTypedocConfigTemplate, getTestIndexTemplate, getHuskyPreCommitTemplate, getLicenseTemplate, getVscodeSettingsTemplate, getTsconfigTemplateString, detectSchemaPath, } from '../templates.js';
9
- import { DEFAULT_CONFIG, DEFAULT_UPDATE_CONFIG } from '../types/config.js';
10
- /**
11
- * 需要检查是否与模板相同的自动生成文件配置
12
- * 注意:workflow 文件不在此列表中,因为它们需要提交到仓库才能触发 CI
13
- */
14
- const AUTO_GENERATED_FILES = [
15
- { path: '.cursorrules', getTemplate: () => getCursorrrulesTemplate() },
16
- { path: 'eslint.config.js', getTemplate: () => getEslintConfigTemplate() },
17
- { path: 'typedoc.json', getTemplate: (ctx) => getTypedocConfigTemplate({ repoName: ctx.repoName }) },
18
- { path: 'test/_.test.ts', getTemplate: (ctx) => getTestIndexTemplate({ name: ctx.name }) },
19
- { path: '.husky/pre-commit', getTemplate: () => getHuskyPreCommitTemplate() },
20
- { path: '.vscode/settings.json', getTemplate: () => getVscodeSettingsTemplate() },
21
- { path: 'tsconfig.json', getTemplate: () => getTsconfigTemplateString() },
22
- ];
23
- /**
24
- * 检查文件是否在 .gitignore 的自动生成文件列表中
25
- */
26
- async function isFileInGitignore(projectDir, filePath) {
27
- const gitignorePath = path.join(projectDir, '.gitignore');
28
- if (!await fs.pathExists(gitignorePath)) {
29
- return false;
30
- }
31
- const gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');
32
- const escapedPath = filePath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
33
- const regex = new RegExp(`^${escapedPath}$`, 'm');
34
- return regex.test(gitignoreContent);
35
- }
36
- /**
37
- * 更新 feng3d.json 配置文件
38
- */
39
- async function updateFeng3dConfig(projectDir) {
40
- const configPath = path.join(projectDir, 'feng3d.json');
41
- const schemaPath = detectSchemaPath(projectDir);
42
- // 从 package.json 读取项目名称
43
- const packageJsonPath = path.join(projectDir, 'package.json');
44
- const packageJson = await fs.readJson(packageJsonPath);
45
- const name = packageJson.name || path.basename(projectDir);
46
- // 检查文件是否在 .gitignore 中(自动生成的文件直接覆盖)
47
- const isInGitignore = await isFileInGitignore(projectDir, 'feng3d.json');
48
- if (!await fs.pathExists(configPath) || isInGitignore) {
49
- // 创建或覆盖 feng3d.json
50
- const configTemplate = getFeng3dConfigTemplate({ name, schemaPath });
51
- await fs.writeJson(configPath, configTemplate, { spaces: 4 });
52
- console.log(chalk.gray(isInGitignore ? ' 覆盖: feng3d.json(在忽略列表中)' : ' 创建: feng3d.json'));
53
- }
54
- else {
55
- // 更新现有的 feng3d.json(保留用户自定义配置)
56
- try {
57
- const configData = await fs.readJson(configPath);
58
- let updated = false;
59
- // 更新 $schema 路径
60
- if (configData.$schema !== schemaPath) {
61
- configData.$schema = schemaPath;
62
- updated = true;
63
- }
64
- // 更新 name(如果与 package.json 不同)
65
- if (configData.name !== name) {
66
- configData.name = name;
67
- updated = true;
68
- }
69
- if (updated) {
70
- await fs.writeJson(configPath, configData, { spaces: 4 });
71
- console.log(chalk.gray(' 更新: feng3d.json'));
72
- }
73
- else {
74
- console.log(chalk.gray(' 跳过: feng3d.json(无需更新)'));
75
- }
76
- }
77
- catch (error) {
78
- // 文件损坏,重新创建
79
- const configTemplate = getFeng3dConfigTemplate({ name, schemaPath });
80
- await fs.writeJson(configPath, configTemplate, { spaces: 4 });
81
- console.log(chalk.gray(' 重建: feng3d.json'));
82
- }
83
- }
84
- }
85
- /**
86
- * 读取项目的 feng3d.json 配置文件
87
- */
88
- async function loadProjectConfig(projectDir) {
89
- const configPath = path.join(projectDir, 'feng3d.json');
90
- if (!await fs.pathExists(configPath)) {
91
- return DEFAULT_CONFIG;
92
- }
93
- try {
94
- const configData = await fs.readJson(configPath);
95
- return { ...DEFAULT_CONFIG, ...configData };
96
- }
97
- catch (error) {
98
- console.log(chalk.yellow(` 警告: 无法加载 feng3d.json,使用默认配置 (${error})`));
99
- return DEFAULT_CONFIG;
100
- }
101
- }
102
- /**
103
- * 检查是否有任何 CLI 更新选项被指定
104
- */
105
- function hasAnyUpdateOption(options) {
106
- return !!(options.config || options.eslint || options.gitignore || options.cursorrules ||
107
- options.publish || options.pages || options.pullRequest || options.typedoc ||
108
- options.test || options.deps || options.husky || options.license || options.vscode ||
109
- options.tsconfig);
110
- }
111
- /**
112
- * 合并 CLI 选项和配置文件中的更新选项
113
- * CLI 选项优先级高于配置文件
114
- */
115
- function mergeUpdateOptions(cliOptions, configUpdate) {
116
- // 如果用户指定了 --all,则全部更新
117
- if (cliOptions.all) {
118
- return DEFAULT_UPDATE_CONFIG;
119
- }
120
- // 如果用户指定了任何特定选项,则只使用 CLI 选项
121
- if (hasAnyUpdateOption(cliOptions)) {
122
- return {
123
- config: cliOptions.config || false,
124
- eslint: cliOptions.eslint || false,
125
- gitignore: cliOptions.gitignore || false,
126
- cursorrules: cliOptions.cursorrules || false,
127
- publish: cliOptions.publish || false,
128
- pages: cliOptions.pages || false,
129
- pullRequest: cliOptions.pullRequest || false,
130
- typedoc: cliOptions.typedoc || false,
131
- test: cliOptions.test || false,
132
- deps: cliOptions.deps || false,
133
- husky: cliOptions.husky || false,
134
- license: cliOptions.license || false,
135
- vscode: cliOptions.vscode || false,
136
- tsconfig: cliOptions.tsconfig || false,
137
- };
138
- }
139
- // 否则使用配置文件中的设置
140
- return { ...DEFAULT_UPDATE_CONFIG, ...configUpdate };
141
- }
142
- /**
143
- * 更新项目的规范配置
144
- */
145
- export async function updateProject(options) {
146
- const projectDir = path.resolve(options.directory);
147
- // 检查是否是有效的项目目录
148
- const packageJsonPath = path.join(projectDir, 'package.json');
149
- if (!await fs.pathExists(packageJsonPath)) {
150
- throw new Error(`${projectDir} 不是有效的项目目录(未找到 package.json)`);
151
- }
152
- // 加载项目配置
153
- const config = await loadProjectConfig(projectDir);
154
- // 合并 CLI 选项和配置文件中的更新选项
155
- const updateConfig = mergeUpdateOptions(options, config.update || {});
156
- // 更新 feng3d.json 配置
157
- if (updateConfig.config) {
158
- await updateFeng3dConfig(projectDir);
159
- }
160
- // 获取项目信息用于模板
161
- const packageJson = await fs.readJson(packageJsonPath);
162
- const name = packageJson.name || path.basename(projectDir);
163
- const repoName = name.replace(/^@[^/]+\//, ''); // 移除 scope 前缀
164
- const templateContext = { name, repoName };
165
- // 更新 .gitignore(仅在文件不存在时创建)
166
- if (updateConfig.gitignore) {
167
- const gitignorePath = path.join(projectDir, '.gitignore');
168
- if (!await fs.pathExists(gitignorePath)) {
169
- await fs.writeFile(gitignorePath, getGitignoreTemplate());
170
- console.log(chalk.gray(' 创建: .gitignore'));
171
- }
172
- else {
173
- console.log(chalk.gray(' 跳过: .gitignore(已存在)'));
174
- }
175
- }
176
- // 更新 .cursorrules
177
- if (updateConfig.cursorrules) {
178
- await fs.writeFile(path.join(projectDir, '.cursorrules'), getCursorrrulesTemplate());
179
- console.log(chalk.gray(' 更新: .cursorrules'));
180
- }
181
- // 更新 eslint.config.js(根据配置决定是否启用)
182
- if (updateConfig.eslint) {
183
- if (config.eslint?.enabled !== false) {
184
- await createEslintConfigFile(projectDir);
185
- console.log(chalk.gray(' 更新: eslint.config.js'));
186
- }
187
- else {
188
- console.log(chalk.gray(' 跳过: eslint.config.js(配置中已禁用)'));
189
- }
190
- }
191
- // 更新 .github/workflows/publish.yml
192
- if (updateConfig.publish) {
193
- await fs.ensureDir(path.join(projectDir, '.github/workflows'));
194
- await fs.writeFile(path.join(projectDir, '.github/workflows/publish.yml'), getPublishWorkflowTemplate());
195
- console.log(chalk.gray(' 更新: .github/workflows/publish.yml'));
196
- }
197
- // 更新 .github/workflows/pages.yml
198
- if (updateConfig.pages) {
199
- await fs.ensureDir(path.join(projectDir, '.github/workflows'));
200
- await fs.writeFile(path.join(projectDir, '.github/workflows/pages.yml'), getPagesWorkflowTemplate());
201
- console.log(chalk.gray(' 更新: .github/workflows/pages.yml'));
202
- }
203
- // 更新 .github/workflows/pull-request.yml
204
- if (updateConfig.pullRequest) {
205
- await fs.ensureDir(path.join(projectDir, '.github/workflows'));
206
- await fs.writeFile(path.join(projectDir, '.github/workflows/pull-request.yml'), getPullRequestWorkflowTemplate());
207
- console.log(chalk.gray(' 更新: .github/workflows/pull-request.yml'));
208
- }
209
- // 更新 typedoc.json(根据配置决定是否启用)
210
- if (updateConfig.typedoc) {
211
- if (config.typedoc?.enabled !== false) {
212
- const typedocContent = getTypedocConfigTemplate({ repoName });
213
- await fs.writeFile(path.join(projectDir, 'typedoc.json'), typedocContent);
214
- console.log(chalk.gray(' 更新: typedoc.json'));
215
- }
216
- else {
217
- console.log(chalk.gray(' 跳过: typedoc.json(配置中已禁用)'));
218
- }
219
- }
220
- // 更新 test/index.test.ts(根据配置决定是否启用)
221
- if (updateConfig.test) {
222
- if (config.vitest?.enabled !== false) {
223
- const testDir = path.join(projectDir, 'test');
224
- const testFilePath = path.join(testDir, '_.test.ts');
225
- // 检查测试目录是否有其他文件
226
- let hasOtherFiles = false;
227
- if (await fs.pathExists(testDir)) {
228
- const files = await fs.readdir(testDir);
229
- // 排除 _.test.ts 本身,检查是否有其他文件
230
- hasOtherFiles = files.some(file => file !== '_.test.ts');
231
- }
232
- // 只有在测试目录没有其他文件时才生成
233
- if (!hasOtherFiles) {
234
- await fs.ensureDir(testDir);
235
- const testContent = getTestIndexTemplate({ name });
236
- await fs.writeFile(testFilePath, testContent);
237
- console.log(chalk.gray(' 更新: test/_.test.ts'));
238
- }
239
- else {
240
- console.log(chalk.gray(' 跳过: test/_.test.ts(测试目录已有其他文件)'));
241
- }
242
- }
243
- else {
244
- console.log(chalk.gray(' 跳过: test/_.test.ts(vitest 配置中已禁用)'));
245
- }
246
- }
247
- // 更新依赖版本(根据配置决定包含哪些依赖)
248
- if (updateConfig.deps) {
249
- await updateDependencies(projectDir, config);
250
- console.log(chalk.gray(' 更新: package.json devDependencies'));
251
- }
252
- // 更新 husky pre-commit hook
253
- if (updateConfig.husky) {
254
- await fs.ensureDir(path.join(projectDir, '.husky'));
255
- await fs.writeFile(path.join(projectDir, '.husky/pre-commit'), getHuskyPreCommitTemplate());
256
- console.log(chalk.gray(' 更新: .husky/pre-commit'));
257
- // 更新 package.json 添加 husky 配置
258
- await updateHuskyConfig(projectDir);
259
- }
260
- // 更新 LICENSE 文件(仅在不存在时创建)
261
- if (updateConfig.license) {
262
- const licensePath = path.join(projectDir, 'LICENSE');
263
- if (!await fs.pathExists(licensePath)) {
264
- await fs.writeFile(licensePath, getLicenseTemplate());
265
- console.log(chalk.gray(' 创建: LICENSE'));
266
- }
267
- else {
268
- console.log(chalk.gray(' 跳过: LICENSE(已存在)'));
269
- }
270
- }
271
- // 更新 .vscode/settings.json
272
- if (updateConfig.vscode) {
273
- await fs.ensureDir(path.join(projectDir, '.vscode'));
274
- await fs.writeFile(path.join(projectDir, '.vscode/settings.json'), getVscodeSettingsTemplate());
275
- console.log(chalk.gray(' 更新: .vscode/settings.json'));
276
- }
277
- // 更新 tsconfig.json(仅在忽略列表中时覆盖)
278
- if (updateConfig.tsconfig) {
279
- const tsconfigPath = path.join(projectDir, 'tsconfig.json');
280
- const isIgnored = await isFileInGitignore(projectDir, 'tsconfig.json');
281
- if (isIgnored || !await fs.pathExists(tsconfigPath)) {
282
- await fs.writeFile(tsconfigPath, getTsconfigTemplateString());
283
- console.log(chalk.gray(isIgnored ? ' 覆盖: tsconfig.json(在忽略列表中)' : ' 创建: tsconfig.json'));
284
- }
285
- else {
286
- console.log(chalk.gray(' 跳过: tsconfig.json(已存在且不在忽略列表中)'));
287
- }
288
- }
289
- // 同步 .gitignore,检查自动生成的文件是否被修改
290
- await syncGitignoreForModifiedFiles(projectDir, templateContext);
291
- }
292
- /**
293
- * 创建 ESLint 配置文件
294
- */
295
- export async function createEslintConfigFile(projectDir) {
296
- await fs.writeFile(path.join(projectDir, 'eslint.config.js'), getEslintConfigTemplate());
297
- }
298
- /**
299
- * 检测 JSON 文件的缩进风格
300
- */
301
- function detectIndent(content) {
302
- const match = content.match(/^[ \t]+/m);
303
- return match ? match[0] : ' ';
304
- }
305
- /**
306
- * 更新 package.json 中的 devDependencies 版本
307
- */
308
- async function updateDependencies(projectDir, config) {
309
- const packageJsonPath = path.join(projectDir, 'package.json');
310
- // 读取原始内容以检测缩进风格
311
- const originalContent = await fs.readFile(packageJsonPath, 'utf-8');
312
- const indent = detectIndent(originalContent);
313
- const hasTrailingNewline = originalContent.endsWith('\n');
314
- const packageJson = JSON.parse(originalContent);
315
- const standardDeps = getDevDependencies({
316
- includeVitest: config.vitest?.enabled !== false,
317
- includeTypedoc: config.typedoc?.enabled !== false,
318
- });
319
- // 添加或更新 devDependencies
320
- let updated = false;
321
- if (!packageJson.devDependencies) {
322
- packageJson.devDependencies = {};
323
- }
324
- for (const [key, value] of Object.entries(standardDeps)) {
325
- if (!(key in packageJson.devDependencies)) {
326
- packageJson.devDependencies[key] = value;
327
- updated = true;
328
- console.log(chalk.gray(` 添加: devDependencies.${key} = "${value}"`));
329
- }
330
- else if (packageJson.devDependencies[key] !== value) {
331
- packageJson.devDependencies[key] = value;
332
- updated = true;
333
- console.log(chalk.gray(` 更新: devDependencies.${key} = "${value}"`));
334
- }
335
- }
336
- // 添加标准 scripts
337
- if (!packageJson.scripts) {
338
- packageJson.scripts = {};
339
- }
340
- const standardScripts = {
341
- lint: 'eslint . --ext .js,.ts --max-warnings 0',
342
- lintfix: 'npm run lint -- --fix',
343
- docs: 'typedoc',
344
- upload_oss: 'npm run docs && feng3d-cli oss_upload_dir',
345
- update: 'npx feng3d-cli update && npm install',
346
- postinstall: 'npx feng3d-cli update || exit 0',
347
- };
348
- for (const [key, value] of Object.entries(standardScripts)) {
349
- if (!(key in packageJson.scripts)) {
350
- packageJson.scripts[key] = value;
351
- updated = true;
352
- console.log(chalk.gray(` 添加: scripts.${key}`));
353
- }
354
- }
355
- // 只有在有更新时才写入文件
356
- if (updated) {
357
- let newContent = JSON.stringify(packageJson, null, indent);
358
- if (hasTrailingNewline) {
359
- newContent += '\n';
360
- }
361
- await fs.writeFile(packageJsonPath, newContent);
362
- }
363
- }
364
- /**
365
- * 更新 package.json 添加 husky 配置
366
- */
367
- async function updateHuskyConfig(projectDir) {
368
- const packageJsonPath = path.join(projectDir, 'package.json');
369
- // 读取原始内容以检测缩进风格
370
- const originalContent = await fs.readFile(packageJsonPath, 'utf-8');
371
- const indent = detectIndent(originalContent);
372
- const hasTrailingNewline = originalContent.endsWith('\n');
373
- const packageJson = JSON.parse(originalContent);
374
- let updated = false;
375
- // 添加 husky 和 lint-staged 依赖
376
- if (!packageJson.devDependencies) {
377
- packageJson.devDependencies = {};
378
- }
379
- if (!packageJson.devDependencies.husky) {
380
- packageJson.devDependencies.husky = VERSIONS.husky;
381
- updated = true;
382
- console.log(chalk.gray(` 添加: devDependencies.husky = "${VERSIONS.husky}"`));
383
- }
384
- if (!packageJson.devDependencies['lint-staged']) {
385
- packageJson.devDependencies['lint-staged'] = VERSIONS['lint-staged'];
386
- updated = true;
387
- console.log(chalk.gray(` 添加: devDependencies.lint-staged = "${VERSIONS['lint-staged']}"`));
388
- }
389
- // 添加 prepare 脚本
390
- if (!packageJson.scripts) {
391
- packageJson.scripts = {};
392
- }
393
- if (packageJson.scripts.prepare !== 'husky') {
394
- packageJson.scripts.prepare = 'husky';
395
- updated = true;
396
- console.log(chalk.gray(' 添加: scripts.prepare = "husky"'));
397
- }
398
- // 添加 lint-staged 配置
399
- if (!packageJson['lint-staged']) {
400
- packageJson['lint-staged'] = {
401
- '*.{js,ts}': ['eslint --fix --max-warnings 0'],
402
- };
403
- updated = true;
404
- console.log(chalk.gray(' 添加: lint-staged 配置'));
405
- }
406
- // 只有在有更新时才写入文件
407
- if (updated) {
408
- let newContent = JSON.stringify(packageJson, null, indent);
409
- if (hasTrailingNewline) {
410
- newContent += '\n';
411
- }
412
- await fs.writeFile(packageJsonPath, newContent);
413
- }
414
- }
415
- /**
416
- * 自动生成文件的注释说明
417
- */
418
- const AUTO_GENERATED_COMMENT = `# 以下文件可由 feng3d-cli 自动生成,无需提交
419
- # 运行 \`feng3d-cli update\` 可重新生成`;
420
- /**
421
- * 同步 .gitignore,确保自动生成的文件在忽略列表中
422
- */
423
- async function syncGitignoreForModifiedFiles(projectDir, _ctx) {
424
- const gitignorePath = path.join(projectDir, '.gitignore');
425
- if (!await fs.pathExists(gitignorePath)) {
426
- return;
427
- }
428
- let gitignoreContent = await fs.readFile(gitignorePath, 'utf-8');
429
- let modified = false;
430
- // 需要添加到 .gitignore 的文件列表
431
- const filesToAdd = [];
432
- // 检查 feng3d.json 是否在 .gitignore 中
433
- const feng3dConfigPath = 'feng3d.json';
434
- const escapedFeng3dPath = feng3dConfigPath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
435
- const feng3dRegex = new RegExp(`^${escapedFeng3dPath}$`, 'm');
436
- if (!feng3dRegex.test(gitignoreContent)) {
437
- filesToAdd.push(feng3dConfigPath);
438
- }
439
- // 检查其他自动生成的文件是否在 .gitignore 中
440
- // 只有当文件内容与模板一致时才添加到忽略列表
441
- for (const file of AUTO_GENERATED_FILES) {
442
- const escapedPath = file.path.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
443
- const regex = new RegExp(`^${escapedPath}$`, 'm');
444
- if (!regex.test(gitignoreContent)) {
445
- // 检查文件是否存在且内容与模板一致
446
- const filePath = path.join(projectDir, file.path);
447
- if (await fs.pathExists(filePath)) {
448
- const fileContent = await fs.readFile(filePath, 'utf-8');
449
- const templateContent = file.getTemplate(_ctx);
450
- // 只有内容与模板一致时才添加到忽略列表
451
- if (fileContent.trim() === templateContent.trim()) {
452
- filesToAdd.push(file.path);
453
- }
454
- }
455
- }
456
- }
457
- // 添加需要添加的文件
458
- if (filesToAdd.length > 0) {
459
- // 检查是否已有注释说明
460
- const hasComment = gitignoreContent.includes('# 以下文件可由 feng3d-cli 自动生成');
461
- if (!hasComment) {
462
- // 添加注释和文件
463
- gitignoreContent = gitignoreContent.trim() + '\n\n' + AUTO_GENERATED_COMMENT + '\n' + filesToAdd.join('\n') + '\n';
464
- }
465
- else {
466
- // 在注释后添加文件
467
- for (const filePath of filesToAdd) {
468
- gitignoreContent = gitignoreContent.trim() + '\n' + filePath + '\n';
469
- }
470
- }
471
- modified = true;
472
- for (const filePath of filesToAdd) {
473
- console.log(chalk.gray(` 添加到 .gitignore: ${filePath}`));
474
- }
475
- }
476
- // 清理多余的空行
477
- if (modified) {
478
- gitignoreContent = gitignoreContent.replace(/\n\n+/g, '\n\n').trim() + '\n';
479
- await fs.writeFile(gitignorePath, gitignoreContent);
480
- }
481
- }
482
- //# sourceMappingURL=update.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}