feng3d-cli 0.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.
- package/README.md +148 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +98 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/create.d.ts +13 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +118 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/oss.d.ts +11 -0
- package/dist/commands/oss.d.ts.map +1 -0
- package/dist/commands/oss.js +107 -0
- package/dist/commands/oss.js.map +1 -0
- package/dist/commands/update.d.ts +20 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +172 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/eslint.d.ts +236 -0
- package/dist/eslint.d.ts.map +1 -0
- package/dist/eslint.js +119 -0
- package/dist/eslint.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/templates.d.ts +44 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +146 -0
- package/dist/templates.js.map +1 -0
- package/dist/versions.d.ts +29 -0
- package/dist/versions.d.ts.map +1 -0
- package/dist/versions.js +54 -0
- package/dist/versions.js.map +1 -0
- package/package.json +68 -0
- package/templates/.cursorrules +79 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目模板文件内容
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* .gitignore 模板
|
|
6
|
+
*/
|
|
7
|
+
export const gitignoreTemplate = `node_modules
|
|
8
|
+
dist
|
|
9
|
+
lib
|
|
10
|
+
public
|
|
11
|
+
out
|
|
12
|
+
/package-lock.json
|
|
13
|
+
# 自动生成的测试配置文件
|
|
14
|
+
**/test-config.ts
|
|
15
|
+
# 测试构建输出目录
|
|
16
|
+
test_dist
|
|
17
|
+
# 测试覆盖率
|
|
18
|
+
coverage
|
|
19
|
+
`;
|
|
20
|
+
/**
|
|
21
|
+
* .cursorrules 模板
|
|
22
|
+
*/
|
|
23
|
+
export const cursorrrulesTemplate = `# Cursor 项目规则
|
|
24
|
+
|
|
25
|
+
## Git 提交信息规范
|
|
26
|
+
|
|
27
|
+
当生成 Git 提交信息时:
|
|
28
|
+
|
|
29
|
+
1. **语言**:始终使用简体中文
|
|
30
|
+
|
|
31
|
+
2. **格式**:遵循约定式提交(Conventional Commits)格式
|
|
32
|
+
\`\`\`
|
|
33
|
+
<类型>(<范围>): <简短描述>
|
|
34
|
+
|
|
35
|
+
[可选的详细说明]
|
|
36
|
+
|
|
37
|
+
[可选的脚注]
|
|
38
|
+
\`\`\`
|
|
39
|
+
|
|
40
|
+
3. **提交类型**(中文描述):
|
|
41
|
+
- \`feat\`: 新增功能
|
|
42
|
+
- \`fix\`: 修复问题
|
|
43
|
+
- \`refactor\`: 代码重构(不改变功能)
|
|
44
|
+
- \`perf\`: 性能优化
|
|
45
|
+
- \`style\`: 代码格式调整(不影响代码含义)
|
|
46
|
+
- \`docs\`: 文档更新
|
|
47
|
+
- \`test\`: 测试相关
|
|
48
|
+
- \`chore\`: 构建过程或辅助工具的变动
|
|
49
|
+
- \`build\`: 构建系统或外部依赖项的更改
|
|
50
|
+
- \`ci\`: CI 配置文件和脚本的更改
|
|
51
|
+
|
|
52
|
+
4. **范围**(可选):可以是模块、组件或功能区域
|
|
53
|
+
|
|
54
|
+
5. **提交信息要求**:
|
|
55
|
+
- 第一行简短描述,不超过 50 个字符
|
|
56
|
+
- 使用祈使句,如"添加"、"修复"、"优化"
|
|
57
|
+
- 描述要清晰、具体、有意义
|
|
58
|
+
|
|
59
|
+
## 代码风格
|
|
60
|
+
|
|
61
|
+
- 优先使用 TypeScript
|
|
62
|
+
- 遵循现有代码的命名约定和格式
|
|
63
|
+
- 添加必要的中文注释以提高代码可读性
|
|
64
|
+
- 使用 ESLint 保持代码格式一致
|
|
65
|
+
- 提交前必须通过 lint 检查
|
|
66
|
+
- 避免使用 \`any\` 类型,优先使用明确的类型定义
|
|
67
|
+
|
|
68
|
+
## 命名规范
|
|
69
|
+
|
|
70
|
+
- **变量和函数**:使用驼峰命名(camelCase)
|
|
71
|
+
- **类和接口**:使用帕斯卡命名(PascalCase)
|
|
72
|
+
- **常量**:使用全大写下划线分隔(UPPER_SNAKE_CASE)
|
|
73
|
+
- **文件名**:使用小写字母和连字符(kebab-case)或与导出的主要类/函数同名
|
|
74
|
+
|
|
75
|
+
## 注释规范
|
|
76
|
+
|
|
77
|
+
- 公共 API 必须添加 JSDoc 注释
|
|
78
|
+
- 复杂逻辑必须添加中文注释说明
|
|
79
|
+
- 临时解决方案或待优化代码必须添加 TODO 注释
|
|
80
|
+
- 注释应该解释"为什么"而不是"是什么"
|
|
81
|
+
|
|
82
|
+
## 模块结构
|
|
83
|
+
|
|
84
|
+
- 避免使用默认导出,优先使用命名导出
|
|
85
|
+
- 每个文件应该有一个明确的职责
|
|
86
|
+
- 每个文件应该不超过 300 行代码
|
|
87
|
+
- 相关功能应该组织在同一个目录下
|
|
88
|
+
|
|
89
|
+
## 测试规范
|
|
90
|
+
|
|
91
|
+
- 新功能必须包含相应的测试
|
|
92
|
+
- 修复 bug 时必须添加回归测试
|
|
93
|
+
- 测试覆盖率应该保持在合理水平(建议 > 80%)
|
|
94
|
+
- 测试应该清晰、独立、可重复
|
|
95
|
+
|
|
96
|
+
## Agent 规则
|
|
97
|
+
|
|
98
|
+
- 没有正确修复问题时重新修复时,尽量还原上次修改的内容后再进行修复
|
|
99
|
+
- 每次完成代码修改后,必须检查并处理编译错误
|
|
100
|
+
- 确保所有测试通过后再告知用户任务完成
|
|
101
|
+
`;
|
|
102
|
+
/**
|
|
103
|
+
* tsconfig.json 模板
|
|
104
|
+
*/
|
|
105
|
+
export const tsconfigTemplate = {
|
|
106
|
+
compilerOptions: {
|
|
107
|
+
target: 'ES5',
|
|
108
|
+
module: 'CommonJS',
|
|
109
|
+
noImplicitAny: false,
|
|
110
|
+
sourceMap: true,
|
|
111
|
+
declarationMap: true,
|
|
112
|
+
declaration: true,
|
|
113
|
+
experimentalDecorators: true,
|
|
114
|
+
emitDeclarationOnly: true,
|
|
115
|
+
skipLibCheck: true,
|
|
116
|
+
esModuleInterop: true,
|
|
117
|
+
downlevelIteration: true,
|
|
118
|
+
lib: ['ES2015', 'ES2017', 'ES2020', 'DOM'],
|
|
119
|
+
outDir: 'lib',
|
|
120
|
+
},
|
|
121
|
+
include: ['src/**/*.ts'],
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* vitest.config.ts 模板
|
|
125
|
+
*/
|
|
126
|
+
export const vitestConfigTemplate = `import { defineConfig } from 'vitest/config';
|
|
127
|
+
|
|
128
|
+
export default defineConfig({
|
|
129
|
+
test: {
|
|
130
|
+
testTimeout: 0,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
`;
|
|
134
|
+
/**
|
|
135
|
+
* typedoc.json 模板
|
|
136
|
+
*/
|
|
137
|
+
export function createTypedocConfig(options) {
|
|
138
|
+
return {
|
|
139
|
+
name: options.name,
|
|
140
|
+
$schema: 'https://typedoc.org/schema.json',
|
|
141
|
+
entryPoints: ['src/index.ts'],
|
|
142
|
+
sourceLinkTemplate: `https://github.com/feng3d-labs/${options.repoName}/tree/master/{path}#L{line}`,
|
|
143
|
+
out: 'public/docs',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;CAYhC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8EnC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,eAAe,EAAE;QACb,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,UAAU;QAClB,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,IAAI;QACjB,sBAAsB,EAAE,IAAI;QAC5B,mBAAmB,EAAE,IAAI;QACzB,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,IAAI;QACxB,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;QAC1C,MAAM,EAAE,KAAK;KAChB;IACD,OAAO,EAAE,CAAC,aAAa,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;CAOnC,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAGnC;IAEG,OAAO;QACH,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,iCAAiC;QAC1C,WAAW,EAAE,CAAC,cAAc,CAAC;QAC7B,kBAAkB,EAAE,kCAAkC,OAAO,CAAC,QAAQ,6BAA6B;QACnG,GAAG,EAAE,aAAa;KACrB,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* feng3d 项目统一依赖版本
|
|
3
|
+
*/
|
|
4
|
+
export declare const VERSIONS: {
|
|
5
|
+
readonly typescript: "5.8.3";
|
|
6
|
+
readonly tslib: "^2.8.1";
|
|
7
|
+
readonly eslint: "9.26.0";
|
|
8
|
+
readonly '@eslint/js': "^9.0.0";
|
|
9
|
+
readonly '@typescript-eslint/eslint-plugin': "8.32.1";
|
|
10
|
+
readonly '@typescript-eslint/parser': "8.32.1";
|
|
11
|
+
readonly 'typescript-eslint': "^8.32.1";
|
|
12
|
+
readonly globals: "^14.0.0";
|
|
13
|
+
readonly vitest: "^3.1.3";
|
|
14
|
+
readonly '@vitest/coverage-v8': "^3.2.4";
|
|
15
|
+
readonly 'happy-dom': "^20.0.11";
|
|
16
|
+
readonly vite: "^6.3.5";
|
|
17
|
+
readonly rimraf: "6.0.1";
|
|
18
|
+
readonly 'cross-env': "7.0.3";
|
|
19
|
+
readonly typedoc: "^0.28.4";
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* 获取 devDependencies 配置
|
|
23
|
+
*/
|
|
24
|
+
export declare function getDevDependencies(options?: {
|
|
25
|
+
includeVitest?: boolean;
|
|
26
|
+
includeTypedoc?: boolean;
|
|
27
|
+
includeCoverage?: boolean;
|
|
28
|
+
}): Record<string, string>;
|
|
29
|
+
//# sourceMappingURL=versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;CAyBX,CAAC;AAEX;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IACxC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgC9B"}
|
package/dist/versions.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* feng3d 项目统一依赖版本
|
|
3
|
+
*/
|
|
4
|
+
export const VERSIONS = {
|
|
5
|
+
// TypeScript 相关
|
|
6
|
+
typescript: '5.8.3',
|
|
7
|
+
tslib: '^2.8.1',
|
|
8
|
+
// ESLint 相关
|
|
9
|
+
eslint: '9.26.0',
|
|
10
|
+
'@eslint/js': '^9.0.0',
|
|
11
|
+
'@typescript-eslint/eslint-plugin': '8.32.1',
|
|
12
|
+
'@typescript-eslint/parser': '8.32.1',
|
|
13
|
+
'typescript-eslint': '^8.32.1',
|
|
14
|
+
globals: '^14.0.0',
|
|
15
|
+
// 测试相关
|
|
16
|
+
vitest: '^3.1.3',
|
|
17
|
+
'@vitest/coverage-v8': '^3.2.4',
|
|
18
|
+
'happy-dom': '^20.0.11',
|
|
19
|
+
// 构建工具
|
|
20
|
+
vite: '^6.3.5',
|
|
21
|
+
rimraf: '6.0.1',
|
|
22
|
+
'cross-env': '7.0.3',
|
|
23
|
+
// 文档
|
|
24
|
+
typedoc: '^0.28.4',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* 获取 devDependencies 配置
|
|
28
|
+
*/
|
|
29
|
+
export function getDevDependencies(options = {}) {
|
|
30
|
+
const deps = {
|
|
31
|
+
'@eslint/js': VERSIONS['@eslint/js'],
|
|
32
|
+
'@typescript-eslint/eslint-plugin': VERSIONS['@typescript-eslint/eslint-plugin'],
|
|
33
|
+
'@typescript-eslint/parser': VERSIONS['@typescript-eslint/parser'],
|
|
34
|
+
'cross-env': VERSIONS['cross-env'],
|
|
35
|
+
eslint: VERSIONS.eslint,
|
|
36
|
+
globals: VERSIONS.globals,
|
|
37
|
+
rimraf: VERSIONS.rimraf,
|
|
38
|
+
tslib: VERSIONS.tslib,
|
|
39
|
+
typescript: VERSIONS.typescript,
|
|
40
|
+
'typescript-eslint': VERSIONS['typescript-eslint'],
|
|
41
|
+
vite: VERSIONS.vite,
|
|
42
|
+
};
|
|
43
|
+
if (options.includeVitest !== false) {
|
|
44
|
+
deps.vitest = VERSIONS.vitest;
|
|
45
|
+
}
|
|
46
|
+
if (options.includeCoverage) {
|
|
47
|
+
deps['@vitest/coverage-v8'] = VERSIONS['@vitest/coverage-v8'];
|
|
48
|
+
}
|
|
49
|
+
if (options.includeTypedoc !== false) {
|
|
50
|
+
deps.typedoc = VERSIONS.typedoc;
|
|
51
|
+
}
|
|
52
|
+
return deps;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACpB,gBAAgB;IAChB,UAAU,EAAE,OAAO;IACnB,KAAK,EAAE,QAAQ;IAEf,YAAY;IACZ,MAAM,EAAE,QAAQ;IAChB,YAAY,EAAE,QAAQ;IACtB,kCAAkC,EAAE,QAAQ;IAC5C,2BAA2B,EAAE,QAAQ;IACrC,mBAAmB,EAAE,SAAS;IAC9B,OAAO,EAAE,SAAS;IAElB,OAAO;IACP,MAAM,EAAE,QAAQ;IAChB,qBAAqB,EAAE,QAAQ;IAC/B,WAAW,EAAE,UAAU;IAEvB,OAAO;IACP,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;IAEpB,KAAK;IACL,OAAO,EAAE,SAAS;CACZ,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAI/B,EAAE;IAEF,MAAM,IAAI,GAA2B;QACjC,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC;QACpC,kCAAkC,EAAE,QAAQ,CAAC,kCAAkC,CAAC;QAChF,2BAA2B,EAAE,QAAQ,CAAC,2BAA2B,CAAC;QAClE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB,CAAC;QAClD,IAAI,EAAE,QAAQ,CAAC,IAAI;KACtB,CAAC;IAEF,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,EACnC,CAAC;QACG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,CAAC,eAAe,EAC3B,CAAC;QACG,IAAI,CAAC,qBAAqB,CAAC,GAAG,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EACpC,CAAC;QACG,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "feng3d-cli",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "feng3d 项目通用标准,包含代码规范、配置模板和 CLI 工具",
|
|
5
|
+
"homepage": "https://github.com/feng3d-labs/feng3d-cli",
|
|
6
|
+
"author": "feng",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"type": "module",
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"bin": {
|
|
12
|
+
"feng3d-cli": "./dist/cli.js"
|
|
13
|
+
},
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./eslint": {
|
|
20
|
+
"types": "./dist/eslint.d.ts",
|
|
21
|
+
"import": "./dist/eslint.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"dev": "tsc -w",
|
|
27
|
+
"test": "vitest run",
|
|
28
|
+
"test:watch": "vitest",
|
|
29
|
+
"lint": "eslint . --ext .js,.ts --max-warnings 0",
|
|
30
|
+
"lintfix": "npm run lint -- --fix",
|
|
31
|
+
"update-rules": "node dist/cli.js update --all",
|
|
32
|
+
"prepublishOnly": "npm run lint && npm test && npm run build",
|
|
33
|
+
"publish:manual": "npm publish"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "https://github.com/feng3d-labs/feng3d-cli.git"
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"templates"
|
|
45
|
+
],
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"ali-oss": "^6.22.0",
|
|
48
|
+
"chalk": "^5.3.0",
|
|
49
|
+
"commander": "^12.1.0",
|
|
50
|
+
"fs-extra": "^11.2.0"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@eslint/js": "^9.0.0",
|
|
54
|
+
"@types/fs-extra": "^11.0.4",
|
|
55
|
+
"@types/node": "^22.10.2",
|
|
56
|
+
"@typescript-eslint/eslint-plugin": "8.32.1",
|
|
57
|
+
"@typescript-eslint/parser": "8.32.1",
|
|
58
|
+
"eslint": "9.26.0",
|
|
59
|
+
"globals": "^14.0.0",
|
|
60
|
+
"rimraf": "6.0.1",
|
|
61
|
+
"tslib": "^2.8.1",
|
|
62
|
+
"typedoc": "^0.28.4",
|
|
63
|
+
"typescript": "5.8.3",
|
|
64
|
+
"typescript-eslint": "^8.32.1",
|
|
65
|
+
"vite": "^6.3.5",
|
|
66
|
+
"vitest": "^3.1.3"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Cursor 项目规则
|
|
2
|
+
|
|
3
|
+
## Git 提交信息规范
|
|
4
|
+
|
|
5
|
+
当生成 Git 提交信息时:
|
|
6
|
+
|
|
7
|
+
1. **语言**:始终使用简体中文
|
|
8
|
+
|
|
9
|
+
2. **格式**:遵循约定式提交(Conventional Commits)格式
|
|
10
|
+
```
|
|
11
|
+
<类型>(<范围>): <简短描述>
|
|
12
|
+
|
|
13
|
+
[可选的详细说明]
|
|
14
|
+
|
|
15
|
+
[可选的脚注]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
3. **提交类型**(中文描述):
|
|
19
|
+
- `feat`: 新增功能
|
|
20
|
+
- `fix`: 修复问题
|
|
21
|
+
- `refactor`: 代码重构(不改变功能)
|
|
22
|
+
- `perf`: 性能优化
|
|
23
|
+
- `style`: 代码格式调整(不影响代码含义)
|
|
24
|
+
- `docs`: 文档更新
|
|
25
|
+
- `test`: 测试相关
|
|
26
|
+
- `chore`: 构建过程或辅助工具的变动
|
|
27
|
+
- `build`: 构建系统或外部依赖项的更改
|
|
28
|
+
- `ci`: CI 配置文件和脚本的更改
|
|
29
|
+
|
|
30
|
+
4. **范围**(可选):可以是模块、组件或功能区域
|
|
31
|
+
|
|
32
|
+
5. **提交信息要求**:
|
|
33
|
+
- 第一行简短描述,不超过 50 个字符
|
|
34
|
+
- 使用祈使句,如"添加"、"修复"、"优化"
|
|
35
|
+
- 描述要清晰、具体、有意义
|
|
36
|
+
|
|
37
|
+
## 代码风格
|
|
38
|
+
|
|
39
|
+
- 优先使用 TypeScript
|
|
40
|
+
- 遵循现有代码的命名约定和格式
|
|
41
|
+
- 添加必要的中文注释以提高代码可读性
|
|
42
|
+
- 使用 ESLint 保持代码格式一致
|
|
43
|
+
- 提交前必须通过 lint 检查
|
|
44
|
+
- 避免使用 `any` 类型,优先使用明确的类型定义
|
|
45
|
+
|
|
46
|
+
## 命名规范
|
|
47
|
+
|
|
48
|
+
- **变量和函数**:使用驼峰命名(camelCase)
|
|
49
|
+
- **类和接口**:使用帕斯卡命名(PascalCase)
|
|
50
|
+
- **常量**:使用全大写下划线分隔(UPPER_SNAKE_CASE)
|
|
51
|
+
- **文件名**:使用小写字母和连字符(kebab-case)或与导出的主要类/函数同名
|
|
52
|
+
|
|
53
|
+
## 注释规范
|
|
54
|
+
|
|
55
|
+
- 公共 API 必须添加 JSDoc 注释
|
|
56
|
+
- 复杂逻辑必须添加中文注释说明
|
|
57
|
+
- 临时解决方案或待优化代码必须添加 TODO 注释
|
|
58
|
+
- 注释应该解释"为什么"而不是"是什么"
|
|
59
|
+
|
|
60
|
+
## 模块结构
|
|
61
|
+
|
|
62
|
+
- 避免使用默认导出,优先使用命名导出
|
|
63
|
+
- 每个文件应该有一个明确的职责
|
|
64
|
+
- 每个文件应该不超过 300 行代码
|
|
65
|
+
- 相关功能应该组织在同一个目录下
|
|
66
|
+
|
|
67
|
+
## 测试规范
|
|
68
|
+
|
|
69
|
+
- 新功能必须包含相应的测试
|
|
70
|
+
- 修复 bug 时必须添加回归测试
|
|
71
|
+
- 测试覆盖率应该保持在合理水平(建议 > 80%)
|
|
72
|
+
- 测试应该清晰、独立、可重复
|
|
73
|
+
|
|
74
|
+
## Agent 规则
|
|
75
|
+
|
|
76
|
+
- 没有正确修复问题时重新修复时,尽量还原上次修改的内容后再进行修复
|
|
77
|
+
- 每次完成代码修改后,必须检查并处理编译错误
|
|
78
|
+
- 确保所有测试通过后再告知用户任务完成
|
|
79
|
+
|