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.
- package/LICENSE +15 -0
- package/README.md +148 -148
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +13 -6
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/oss.d.ts.map +1 -1
- package/dist/commands/oss.js +26 -1
- package/dist/commands/oss.js.map +1 -1
- package/dist/commands/update.d.ts +10 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +444 -134
- package/dist/commands/update.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/templates.d.ts +79 -27
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +147 -140
- package/dist/templates.js.map +1 -1
- package/dist/types/config.d.ts +111 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +50 -0
- package/dist/types/config.js.map +1 -0
- package/dist/versions.d.ts +2 -0
- package/dist/versions.d.ts.map +1 -1
- package/dist/versions.js +6 -0
- package/dist/versions.js.map +1 -1
- package/package.json +81 -64
- package/schemas/feng3d.schema.json +191 -0
- package/templates/.cursorrules +159 -79
- package/templates/.github/workflows/pages.yml +60 -0
- package/templates/.github/workflows/publish.yml +128 -0
- package/templates/.github/workflows/pull-request.yml +31 -0
- package/templates/.husky/pre-commit +2 -0
- package/templates/.vscode/settings.json +10 -0
- package/templates/LICENSE +15 -0
- package/templates/eslint.config.js +159 -0
- package/templates/feng3d.json +42 -0
- package/templates/gitignore +23 -0
- package/templates/test/_.test.ts +5 -0
- package/templates/tsconfig.json +20 -0
- package/templates/typedoc.json +8 -0
- package/templates/vitest.config.ts +8 -0
package/dist/versions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ
|
|
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
|
package/dist/versions.js.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
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
|
+
|
package/templates/.cursorrules
CHANGED
|
@@ -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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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
|
+
|