feng3d-cli 0.0.1 → 0.0.3

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 (46) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +148 -148
  3. package/dist/cli.js +10 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/create.d.ts.map +1 -1
  6. package/dist/commands/create.js +13 -6
  7. package/dist/commands/create.js.map +1 -1
  8. package/dist/commands/oss.d.ts.map +1 -1
  9. package/dist/commands/oss.js +26 -1
  10. package/dist/commands/oss.js.map +1 -1
  11. package/dist/commands/update.d.ts +10 -0
  12. package/dist/commands/update.d.ts.map +1 -1
  13. package/dist/commands/update.js +444 -134
  14. package/dist/commands/update.js.map +1 -1
  15. package/dist/index.d.ts +1 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/templates.d.ts +79 -27
  20. package/dist/templates.d.ts.map +1 -1
  21. package/dist/templates.js +147 -140
  22. package/dist/templates.js.map +1 -1
  23. package/dist/types/config.d.ts +111 -0
  24. package/dist/types/config.d.ts.map +1 -0
  25. package/dist/types/config.js +50 -0
  26. package/dist/types/config.js.map +1 -0
  27. package/dist/versions.d.ts +2 -0
  28. package/dist/versions.d.ts.map +1 -1
  29. package/dist/versions.js +6 -0
  30. package/dist/versions.js.map +1 -1
  31. package/package.json +81 -64
  32. package/schemas/feng3d.schema.json +191 -0
  33. package/templates/.cursorrules +159 -79
  34. package/templates/.github/workflows/pages.yml +60 -0
  35. package/templates/.github/workflows/publish.yml +128 -0
  36. package/templates/.github/workflows/pull-request.yml +31 -0
  37. package/templates/.husky/pre-commit +2 -0
  38. package/templates/.vscode/settings.json +10 -0
  39. package/templates/LICENSE +15 -0
  40. package/templates/eslint.config.js +159 -0
  41. package/templates/feng3d.json +42 -0
  42. package/templates/gitignore +23 -0
  43. package/templates/test/_.test.ts +5 -0
  44. package/templates/tsconfig.json +20 -0
  45. package/templates/typedoc.json +8 -0
  46. package/templates/vitest.config.ts +8 -0
@@ -1 +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"}
1
+ {"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;CA6BX,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,CAoC9B"}
package/dist/versions.js CHANGED
@@ -22,6 +22,9 @@ export const VERSIONS = {
22
22
  'cross-env': '7.0.3',
23
23
  // 文档
24
24
  typedoc: '^0.28.4',
25
+ // Git hooks
26
+ husky: '^9.1.7',
27
+ 'lint-staged': '^15.2.10',
25
28
  };
26
29
  /**
27
30
  * 获取 devDependencies 配置
@@ -49,6 +52,9 @@ export function getDevDependencies(options = {}) {
49
52
  if (options.includeTypedoc !== false) {
50
53
  deps.typedoc = VERSIONS.typedoc;
51
54
  }
55
+ // 默认包含 husky 和 lint-staged
56
+ deps.husky = VERSIONS.husky;
57
+ deps['lint-staged'] = VERSIONS['lint-staged'];
52
58
  return deps;
53
59
  }
54
60
  //# sourceMappingURL=versions.js.map
@@ -1 +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"}
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;IAElB,YAAY;IACZ,KAAK,EAAE,QAAQ;IACf,aAAa,EAAE,UAAU;CACnB,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,2BAA2B;IAC3B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAE9C,OAAO,IAAI,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,68 +1,85 @@
1
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"
2
+ "name": "feng3d-cli",
3
+ "version": "0.0.3",
4
+ "description": "feng3d 项目通用标准,包含代码规范、配置模板和 CLI 工具",
5
+ "homepage": "https://feng3d.com/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"
13
18
  },
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"
19
+ "./eslint": {
20
+ "types": "./dist/eslint.d.ts",
21
+ "import": "./dist/eslint.js"
67
22
  }
23
+ },
24
+ "scripts": {
25
+ "clean": "rimraf \"{lib,dist,public}\"",
26
+ "build": "tsc",
27
+ "dev": "tsc -w",
28
+ "test": "vitest run",
29
+ "test:watch": "vitest",
30
+ "types": "tsc",
31
+ "watch": "tsc -w",
32
+ "lint": "eslint . --ext .js,.ts --max-warnings 0",
33
+ "lintfix": "npm run lint -- --fix",
34
+ "docs": "typedoc",
35
+ "upload_oss": "npm run build && npm run docs && node dist/cli.js oss_upload_dir",
36
+ "update": "npm run build && node dist/cli.js update && npm install",
37
+ "release": "npm run clean && npm run lint && npm run build && npm run docs && npm publish",
38
+ "prepublishOnly": "npm run lint && npm test && npm run build",
39
+ "publish:manual": "npm publish",
40
+ "prepare": "husky",
41
+ "postinstall": "npm run build && node dist/cli.js update || exit 0"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/feng3d-labs/feng3d-cli.git"
49
+ },
50
+ "files": [
51
+ "dist",
52
+ "templates",
53
+ "schemas"
54
+ ],
55
+ "dependencies": {
56
+ "ali-oss": "^6.22.0",
57
+ "chalk": "^5.3.0",
58
+ "commander": "^12.1.0",
59
+ "fs-extra": "^11.2.0"
60
+ },
61
+ "devDependencies": {
62
+ "@eslint/js": "^9.0.0",
63
+ "@types/fs-extra": "^11.0.4",
64
+ "@types/node": "^22.10.2",
65
+ "@typescript-eslint/eslint-plugin": "8.32.1",
66
+ "@typescript-eslint/parser": "8.32.1",
67
+ "eslint": "9.26.0",
68
+ "globals": "^14.0.0",
69
+ "husky": "^9.1.7",
70
+ "lint-staged": "^15.2.10",
71
+ "rimraf": "6.0.1",
72
+ "tslib": "^2.8.1",
73
+ "typedoc": "^0.28.4",
74
+ "typescript": "5.8.3",
75
+ "typescript-eslint": "^8.32.1",
76
+ "vite": "^6.3.5",
77
+ "vitest": "^3.1.3",
78
+ "cross-env": "7.0.3"
79
+ },
80
+ "lint-staged": {
81
+ "*.{js,ts}": [
82
+ "eslint --fix --max-warnings 0"
83
+ ]
84
+ }
68
85
  }
@@ -0,0 +1,191 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "feng3d.schema.json",
4
+ "title": "feng3d 项目配置",
5
+ "description": "feng3d 项目配置文件,用于自定义项目规范和 CLI 行为",
6
+ "type": "object",
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string",
10
+ "description": "JSON Schema 引用"
11
+ },
12
+ "name": {
13
+ "type": "string",
14
+ "description": "项目名称"
15
+ },
16
+ "eslint": {
17
+ "type": "object",
18
+ "description": "ESLint 配置选项",
19
+ "properties": {
20
+ "enabled": {
21
+ "type": "boolean",
22
+ "description": "是否启用 ESLint",
23
+ "default": true
24
+ },
25
+ "ignores": {
26
+ "type": "array",
27
+ "items": {
28
+ "type": "string"
29
+ },
30
+ "description": "额外需要忽略的目录",
31
+ "default": []
32
+ },
33
+ "rules": {
34
+ "type": "object",
35
+ "description": "额外的规则覆盖",
36
+ "additionalProperties": true,
37
+ "default": {}
38
+ }
39
+ },
40
+ "additionalProperties": false
41
+ },
42
+ "vitest": {
43
+ "type": "object",
44
+ "description": "Vitest 测试配置选项",
45
+ "properties": {
46
+ "enabled": {
47
+ "type": "boolean",
48
+ "description": "是否启用 vitest",
49
+ "default": true
50
+ },
51
+ "testTimeout": {
52
+ "type": "number",
53
+ "description": "测试超时时间(毫秒,0 表示无限制)",
54
+ "default": 0,
55
+ "minimum": 0
56
+ }
57
+ },
58
+ "additionalProperties": false
59
+ },
60
+ "typedoc": {
61
+ "type": "object",
62
+ "description": "TypeDoc 文档配置选项",
63
+ "properties": {
64
+ "enabled": {
65
+ "type": "boolean",
66
+ "description": "是否启用 typedoc",
67
+ "default": true
68
+ },
69
+ "outDir": {
70
+ "type": "string",
71
+ "description": "文档输出目录",
72
+ "default": "public/docs"
73
+ }
74
+ },
75
+ "additionalProperties": false
76
+ },
77
+ "oss": {
78
+ "type": "object",
79
+ "description": "OSS 上传配置",
80
+ "properties": {
81
+ "localDir": {
82
+ "type": "string",
83
+ "description": "本地目录",
84
+ "default": "./public"
85
+ },
86
+ "ossDir": {
87
+ "type": "string",
88
+ "description": "OSS 目录(默认使用 package.json 的 name)",
89
+ "default": ""
90
+ }
91
+ },
92
+ "additionalProperties": false
93
+ },
94
+ "templates": {
95
+ "type": "object",
96
+ "description": "项目模板选项",
97
+ "properties": {
98
+ "examples": {
99
+ "type": "boolean",
100
+ "description": "是否创建示例目录",
101
+ "default": true
102
+ },
103
+ "test": {
104
+ "type": "boolean",
105
+ "description": "是否创建测试目录",
106
+ "default": true
107
+ }
108
+ },
109
+ "additionalProperties": false
110
+ },
111
+ "update": {
112
+ "type": "object",
113
+ "description": "更新配置(指定 feng3d-cli update 时默认更新哪些项目)",
114
+ "properties": {
115
+ "config": {
116
+ "type": "boolean",
117
+ "description": "是否更新 feng3d.json 配置",
118
+ "default": true
119
+ },
120
+ "eslint": {
121
+ "type": "boolean",
122
+ "description": "是否更新 ESLint 配置",
123
+ "default": true
124
+ },
125
+ "gitignore": {
126
+ "type": "boolean",
127
+ "description": "是否更新 .gitignore",
128
+ "default": true
129
+ },
130
+ "cursorrules": {
131
+ "type": "boolean",
132
+ "description": "是否更新 .cursorrules",
133
+ "default": true
134
+ },
135
+ "publish": {
136
+ "type": "boolean",
137
+ "description": "是否更新 npm publish workflow",
138
+ "default": true
139
+ },
140
+ "pages": {
141
+ "type": "boolean",
142
+ "description": "是否更新 GitHub Pages workflow",
143
+ "default": true
144
+ },
145
+ "pullRequest": {
146
+ "type": "boolean",
147
+ "description": "是否更新 Pull Request CI workflow",
148
+ "default": true
149
+ },
150
+ "typedoc": {
151
+ "type": "boolean",
152
+ "description": "是否更新 typedoc.json",
153
+ "default": true
154
+ },
155
+ "test": {
156
+ "type": "boolean",
157
+ "description": "是否更新 test/_.test.ts",
158
+ "default": true
159
+ },
160
+ "deps": {
161
+ "type": "boolean",
162
+ "description": "是否更新依赖版本",
163
+ "default": true
164
+ },
165
+ "husky": {
166
+ "type": "boolean",
167
+ "description": "是否更新 husky pre-commit hook",
168
+ "default": true
169
+ },
170
+ "license": {
171
+ "type": "boolean",
172
+ "description": "是否更新 LICENSE 文件",
173
+ "default": true
174
+ },
175
+ "vscode": {
176
+ "type": "boolean",
177
+ "description": "是否更新 .vscode/settings.json",
178
+ "default": true
179
+ },
180
+ "tsconfig": {
181
+ "type": "boolean",
182
+ "description": "是否更新 tsconfig.json",
183
+ "default": true
184
+ }
185
+ },
186
+ "additionalProperties": false
187
+ }
188
+ },
189
+ "additionalProperties": false
190
+ }
191
+
@@ -1,79 +1,159 @@
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
-
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. **范围**(可选):可以是模块、组件或功能区域,如 `webgl`、`webgpu`、`test` 等
31
+
32
+ 5. **提交信息要求**:
33
+ - 第一行简短描述,不超过 50 个字符
34
+ - 使用祈使句,如"添加"、"修复"、"优化"
35
+ - 描述要清晰、具体、有意义
36
+ - 如有必要,添加详细说明,解释"为什么"而不是"是什么"
37
+ - 性能优化提交应说明优化点和预期效果
38
+
39
+ 6. **示例**:
40
+ ```
41
+ feat(webgl): 添加深度测试功能
42
+
43
+ - 实现深度缓冲区管理
44
+ - 添加深度测试配置选项
45
+ - 更新相关文档
46
+ ```
47
+
48
+ ```
49
+ perf(webgpu): 优化纹理上传性能
50
+
51
+ - 使用批量上传减少 GPU 调用次数
52
+ - 预期性能提升 30%
53
+ ```
54
+
55
+ ## 代码风格
56
+
57
+ - 优先使用 TypeScript
58
+ - 遵循现有代码的命名约定和格式
59
+ - 添加必要的中文注释以提高代码可读性
60
+ - 使用 ESLint 和 Prettier 保持代码格式一致
61
+ - 提交前必须通过 lint 检查
62
+ - 避免使用 `any` 类型,优先使用明确的类型定义
63
+
64
+ ## 命名规范
65
+
66
+ - **变量和函数**:使用驼峰命名(camelCase)
67
+ - **类和接口**:使用帕斯卡命名(PascalCase)
68
+ - **常量**:使用全大写下划线分隔(UPPER_SNAKE_CASE)
69
+ - **文件名**:使用小写字母和连字符(kebab-case)或与导出的主要类/函数同名,优先使用函数名
70
+
71
+ ## 注释规范
72
+
73
+ - 公共 API 必须添加 JSDoc 注释
74
+ - 复杂逻辑必须添加中文注释说明
75
+ - 临时解决方案或待优化代码必须添加 TODO 注释
76
+ - 注释应该解释"为什么"而不是"是什么"
77
+
78
+ ## 代码组织结构
79
+
80
+ - **配置文件结构**:在配置文件中(如 `vite.config.js`、`test_vite.config.js` 等),应按照以下顺序组织代码:
81
+ - **文件头部**:导入语句、配置变量(可更改的设置)、主要执行逻辑(如 `export default defineConfig()`)
82
+ - 其次是导出函数以及类应该放在文件前面
83
+ - 再其次是私有函数和类应该放在文件后面
84
+ - **文件尾部**:函数定义(所有辅助函数和工具函数)
85
+
86
+ 这样可以让配置文件的主要配置和执行逻辑一目了然,而将实现细节放在后面。
87
+
88
+ - **模块结构**:
89
+ - 避免使用默认导出,优先使用命名导出
90
+ - 避免不必要的导出
91
+ - 每个文件应该有一个明确的职责
92
+ - 每个文件应该不超过 300 行代码
93
+ - 相关功能应该组织在同一个目录下
94
+ - 使用清晰的目录结构(如 `src/utils/`、`src/types/` 等)
95
+ - 每个模块应该有清晰的职责边界
96
+ - 模块间依赖应该明确且最小化
97
+ - 公共 API 应该稳定,变更需要充分讨论
98
+
99
+ - **渲染相关代码**:
100
+ - Shader 代码应单独文件管理
101
+ - 渲染管线相关代码应组织在专门的目录
102
+ - 资源管理代码应与渲染逻辑分离
103
+
104
+ ## 性能优化规范
105
+
106
+ - **内存管理**:
107
+ - 及时释放 GPU 资源(纹理、缓冲区等)
108
+ - 避免内存泄漏,特别是在渲染循环中
109
+ - 使用对象池复用频繁创建的对象
110
+
111
+ - **渲染优化**:
112
+ - 减少 draw call 数量
113
+ - 合理使用批处理(batching)
114
+ - 避免在渲染循环中进行不必要的计算
115
+ - 使用缓存避免重复计算
116
+
117
+ - **类型安全**:
118
+ - 避免使用 `any` 类型
119
+ - 为 GPU 资源提供明确的类型定义
120
+ - 使用类型守卫确保运行时类型安全
121
+
122
+ ## 错误处理
123
+
124
+ - 优先使用明确的错误类型
125
+ - 提供有意义的错误消息
126
+ - 避免静默失败,除非有明确的业务需求
127
+
128
+ ## 代码审查规范
129
+
130
+ - 所有代码变更必须经过代码审查
131
+ - 审查重点:
132
+ - 代码逻辑正确性
133
+ - 性能影响
134
+ - 类型安全
135
+ - 测试覆盖
136
+ - 文档完整性
137
+
138
+ ## 文档规范
139
+
140
+ - 公共 API 必须包含完整的 JSDoc 注释
141
+ - 复杂算法或业务逻辑必须添加说明文档
142
+ - README 文件应该保持更新
143
+ - 重大变更应该更新 CHANGELOG
144
+
145
+ ## 测试规范
146
+
147
+ - 新功能必须包含相应的测试
148
+ - 修复 bug 时必须添加回归测试
149
+ - 关键渲染功能必须包含测试
150
+ - 性能关键路径应包含性能测试
151
+ - 使用 WebGL/WebGPU 测试框架进行渲染测试
152
+ - 测试覆盖率应该保持在合理水平(建议 > 80%)
153
+ - 测试应该清晰、独立、可重复
154
+
155
+ ## agent 规则
156
+
157
+ - 没有正确修复问题时重新让修复时,尽量还原上次修改的内容后再进行修复
158
+ - 每次完成代码修改后,必须检查并处理编译错误(使用 ReadLints 工具或运行测试)
159
+ - 确保所有测试通过后再告知用户任务完成
@@ -0,0 +1,60 @@
1
+ # 将文档发布到 GitHub Pages
2
+ name: Deploy to GitHub Pages
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - master
8
+ - main
9
+ release:
10
+ types: [published] # 发布新版本时触发
11
+ workflow_dispatch: # 支持手动触发
12
+
13
+ # 设置 GITHUB_TOKEN 的权限
14
+ permissions:
15
+ contents: read
16
+ pages: write
17
+ id-token: write
18
+
19
+ # 只允许一个并发部署
20
+ concurrency:
21
+ group: "pages"
22
+ cancel-in-progress: true
23
+
24
+ jobs:
25
+ build:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - name: Checkout
29
+ uses: actions/checkout@v4
30
+
31
+ - name: Setup Node.js
32
+ uses: actions/setup-node@v4
33
+ with:
34
+ node-version: '20'
35
+
36
+ - name: Install dependencies
37
+ run: npm install
38
+
39
+ - name: Build docs
40
+ run: npm run docs
41
+
42
+ - name: Setup Pages
43
+ uses: actions/configure-pages@v4
44
+
45
+ - name: Upload artifact
46
+ uses: actions/upload-pages-artifact@v3
47
+ with:
48
+ path: './public'
49
+
50
+ deploy:
51
+ environment:
52
+ name: github-pages
53
+ url: ${{ steps.deployment.outputs.page_url }}
54
+ runs-on: ubuntu-latest
55
+ needs: build
56
+ steps:
57
+ - name: Deploy to GitHub Pages
58
+ id: deployment
59
+ uses: actions/deploy-pages@v4
60
+