feng3d-cli 0.0.1 → 0.0.2

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 CHANGED
@@ -1,148 +1,148 @@
1
- # feng3d-cli
2
-
3
- feng3d 命令行工具,包含项目规范、配置模板、OSS 上传等功能。
4
-
5
- ## 功能特性
6
-
7
- - 📋 统一的代码规范(ESLint 配置)
8
- - 📦 统一的依赖版本管理
9
- - 🛠️ CLI 工具支持创建和更新项目
10
- - 📝 项目模板(.gitignore, .cursorrules, tsconfig.json 等)
11
- - 📤 阿里云 OSS 文件上传
12
-
13
- ## 安装
14
-
15
- ```bash
16
- npm install -g feng3d-cli
17
- ```
18
-
19
- 或作为开发依赖:
20
-
21
- ```bash
22
- npm install -D feng3d-cli
23
- ```
24
-
25
- ## CLI 使用
26
-
27
- ### 创建新项目
28
-
29
- ```bash
30
- feng3d-cli create my-project
31
- ```
32
-
33
- 选项:
34
- - `-d, --directory <dir>` - 项目目录(默认:当前目录)
35
- - `--no-examples` - 不创建示例目录
36
- - `--no-vitest` - 不包含 vitest 测试配置
37
-
38
- ### 更新现有项目
39
-
40
- ```bash
41
- feng3d-cli update
42
- ```
43
-
44
- 选项:
45
- - `-d, --directory <dir>` - 项目目录(默认:当前目录)
46
- - `--eslint` - 仅更新 ESLint 配置
47
- - `--gitignore` - 仅更新 .gitignore
48
- - `--cursorrules` - 仅更新 .cursorrules
49
- - `--deps` - 仅更新依赖版本
50
- - `--all` - 更新所有配置
51
-
52
- ### 上传到阿里云 OSS
53
-
54
- ```bash
55
- feng3d-cli oss_upload_dir # 上传 ./public 目录
56
- feng3d-cli oss_upload_dir -l ./dist # 指定本地目录
57
- feng3d-cli oss_upload_dir -l ./public -o my-project # 指定 OSS 目录
58
- ```
59
-
60
- 选项:
61
- - `-l, --local_dir <dir>` - 本地目录(默认:./public)
62
- - `-o, --oss_dir <dir>` - OSS 目录(默认:从 package.json 的 name 获取)
63
-
64
- > 注意:需要在 `C:/Users/Administrator/oss_config.json` 配置 OSS 访问密钥
65
-
66
- ## 编程使用
67
-
68
- ### 获取统一版本
69
-
70
- ```typescript
71
- import { VERSIONS, getDevDependencies } from 'feng3d-cli';
72
-
73
- // 获取特定依赖版本
74
- console.log(VERSIONS.typescript); // '5.8.3'
75
- console.log(VERSIONS.vitest); // '^3.1.3'
76
-
77
- // 获取完整的 devDependencies
78
- const deps = getDevDependencies({
79
- includeVitest: true,
80
- includeCoverage: true,
81
- includeTypedoc: true,
82
- });
83
- ```
84
-
85
- ### 使用 ESLint 配置
86
-
87
- 在项目的 `eslint.config.js` 中:
88
-
89
- ```javascript
90
- import { eslintRules } from 'feng3d-cli/eslint';
91
-
92
- export default [
93
- // ... 其他配置
94
- {
95
- rules: eslintRules,
96
- },
97
- ];
98
- ```
99
-
100
- ### 使用模板
101
-
102
- ```typescript
103
- import {
104
- gitignoreTemplate,
105
- cursorrrulesTemplate,
106
- tsconfigTemplate,
107
- createTypedocConfig,
108
- } from 'feng3d-cli';
109
-
110
- // 创建 typedoc 配置
111
- const config = createTypedocConfig({
112
- name: '@feng3d/my-package',
113
- repoName: 'my-package',
114
- });
115
- ```
116
-
117
- ## 统一版本
118
-
119
- | 依赖 | 版本 |
120
- |------|------|
121
- | TypeScript | 5.8.3 |
122
- | ESLint | 9.26.0 |
123
- | Vitest | ^3.1.3 |
124
- | Vite | ^6.3.5 |
125
- | TypeDoc | ^0.28.4 |
126
-
127
- ## 代码规范
128
-
129
- ### 缩进
130
- - 使用 4 空格缩进
131
-
132
- ### 引号
133
- - 使用单引号
134
-
135
- ### 命名规范
136
- - 变量和函数:camelCase
137
- - 类和接口:PascalCase
138
- - 常量:UPPER_SNAKE_CASE
139
-
140
- ### Git 提交规范
141
- - 使用简体中文
142
- - 遵循 Conventional Commits 格式
143
- - 类型:feat, fix, refactor, perf, style, docs, test, chore, build, ci
144
-
145
- ## 许可证
146
-
147
- MIT
148
-
1
+ # feng3d-cli
2
+
3
+ feng3d 命令行工具,包含项目规范、配置模板、OSS 上传等功能。
4
+
5
+ ## 功能特性
6
+
7
+ - 📋 统一的代码规范(ESLint 配置)
8
+ - 📦 统一的依赖版本管理
9
+ - 🛠️ CLI 工具支持创建和更新项目
10
+ - 📝 项目模板(.gitignore, .cursorrules, tsconfig.json 等)
11
+ - 📤 阿里云 OSS 文件上传
12
+
13
+ ## 安装
14
+
15
+ ```bash
16
+ npm install -g feng3d-cli
17
+ ```
18
+
19
+ 或作为开发依赖:
20
+
21
+ ```bash
22
+ npm install -D feng3d-cli
23
+ ```
24
+
25
+ ## CLI 使用
26
+
27
+ ### 创建新项目
28
+
29
+ ```bash
30
+ feng3d-cli create my-project
31
+ ```
32
+
33
+ 选项:
34
+ - `-d, --directory <dir>` - 项目目录(默认:当前目录)
35
+ - `--no-examples` - 不创建示例目录
36
+ - `--no-vitest` - 不包含 vitest 测试配置
37
+
38
+ ### 更新现有项目
39
+
40
+ ```bash
41
+ feng3d-cli update
42
+ ```
43
+
44
+ 选项:
45
+ - `-d, --directory <dir>` - 项目目录(默认:当前目录)
46
+ - `--eslint` - 仅更新 ESLint 配置
47
+ - `--gitignore` - 仅更新 .gitignore
48
+ - `--cursorrules` - 仅更新 .cursorrules
49
+ - `--deps` - 仅更新依赖版本
50
+ - `--all` - 更新所有配置
51
+
52
+ ### 上传到阿里云 OSS
53
+
54
+ ```bash
55
+ feng3d-cli oss_upload_dir # 上传 ./public 目录
56
+ feng3d-cli oss_upload_dir -l ./dist # 指定本地目录
57
+ feng3d-cli oss_upload_dir -l ./public -o my-project # 指定 OSS 目录
58
+ ```
59
+
60
+ 选项:
61
+ - `-l, --local_dir <dir>` - 本地目录(默认:./public)
62
+ - `-o, --oss_dir <dir>` - OSS 目录(默认:从 package.json 的 name 获取)
63
+
64
+ > 注意:需要在 `C:/Users/Administrator/oss_config.json` 配置 OSS 访问密钥
65
+
66
+ ## 编程使用
67
+
68
+ ### 获取统一版本
69
+
70
+ ```typescript
71
+ import { VERSIONS, getDevDependencies } from 'feng3d-cli';
72
+
73
+ // 获取特定依赖版本
74
+ console.log(VERSIONS.typescript); // '5.8.3'
75
+ console.log(VERSIONS.vitest); // '^3.1.3'
76
+
77
+ // 获取完整的 devDependencies
78
+ const deps = getDevDependencies({
79
+ includeVitest: true,
80
+ includeCoverage: true,
81
+ includeTypedoc: true,
82
+ });
83
+ ```
84
+
85
+ ### 使用 ESLint 配置
86
+
87
+ 在项目的 `eslint.config.js` 中:
88
+
89
+ ```javascript
90
+ import { eslintRules } from 'feng3d-cli/eslint';
91
+
92
+ export default [
93
+ // ... 其他配置
94
+ {
95
+ rules: eslintRules,
96
+ },
97
+ ];
98
+ ```
99
+
100
+ ### 使用模板
101
+
102
+ ```typescript
103
+ import {
104
+ gitignoreTemplate,
105
+ cursorrrulesTemplate,
106
+ tsconfigTemplate,
107
+ createTypedocConfig,
108
+ } from 'feng3d-cli';
109
+
110
+ // 创建 typedoc 配置
111
+ const config = createTypedocConfig({
112
+ name: '@feng3d/my-package',
113
+ repoName: 'my-package',
114
+ });
115
+ ```
116
+
117
+ ## 统一版本
118
+
119
+ | 依赖 | 版本 |
120
+ |------|------|
121
+ | TypeScript | 5.8.3 |
122
+ | ESLint | 9.26.0 |
123
+ | Vitest | ^3.1.3 |
124
+ | Vite | ^6.3.5 |
125
+ | TypeDoc | ^0.28.4 |
126
+
127
+ ## 代码规范
128
+
129
+ ### 缩进
130
+ - 使用 4 空格缩进
131
+
132
+ ### 引号
133
+ - 使用单引号
134
+
135
+ ### 命名规范
136
+ - 变量和函数:camelCase
137
+ - 类和接口:PascalCase
138
+ - 常量:UPPER_SNAKE_CASE
139
+
140
+ ### Git 提交规范
141
+ - 使用简体中文
142
+ - 遵循 Conventional Commits 格式
143
+ - 类型:feat, fix, refactor, perf, style, docs, test, chore, build, ci
144
+
145
+ ## 许可证
146
+
147
+ MIT
148
+
@@ -5,7 +5,7 @@ import fs from 'fs-extra';
5
5
  import path from 'path';
6
6
  import chalk from 'chalk';
7
7
  import { getDevDependencies } from '../versions.js';
8
- import { gitignoreTemplate, cursorrrulesTemplate, tsconfigTemplate, vitestConfigTemplate, createTypedocConfig, } from '../templates.js';
8
+ import { getGitignoreTemplate, getCursorrrulesTemplate, getTsconfigTemplate, getVitestConfigTemplate, getTypedocConfig, } from '../templates.js';
9
9
  import { createEslintConfigFile } from './update.js';
10
10
  /**
11
11
  * 创建符合 feng3d 规范的新项目
@@ -25,24 +25,24 @@ export async function createProject(name, options) {
25
25
  await fs.writeJson(path.join(projectDir, 'package.json'), packageJson, { spaces: 4 });
26
26
  console.log(chalk.gray(' 创建: package.json'));
27
27
  // 创建 tsconfig.json
28
- await fs.writeJson(path.join(projectDir, 'tsconfig.json'), tsconfigTemplate, { spaces: 4 });
28
+ await fs.writeJson(path.join(projectDir, 'tsconfig.json'), getTsconfigTemplate(), { spaces: 4 });
29
29
  console.log(chalk.gray(' 创建: tsconfig.json'));
30
30
  // 创建 .gitignore
31
- await fs.writeFile(path.join(projectDir, '.gitignore'), gitignoreTemplate);
31
+ await fs.writeFile(path.join(projectDir, '.gitignore'), getGitignoreTemplate());
32
32
  console.log(chalk.gray(' 创建: .gitignore'));
33
33
  // 创建 .cursorrules
34
- await fs.writeFile(path.join(projectDir, '.cursorrules'), cursorrrulesTemplate);
34
+ await fs.writeFile(path.join(projectDir, '.cursorrules'), getCursorrrulesTemplate());
35
35
  console.log(chalk.gray(' 创建: .cursorrules'));
36
36
  // 创建 eslint.config.js
37
37
  await createEslintConfigFile(projectDir);
38
38
  console.log(chalk.gray(' 创建: eslint.config.js'));
39
39
  // 创建 vitest.config.ts
40
40
  if (options.vitest !== false) {
41
- await fs.writeFile(path.join(projectDir, 'vitest.config.ts'), vitestConfigTemplate);
41
+ await fs.writeFile(path.join(projectDir, 'vitest.config.ts'), getVitestConfigTemplate());
42
42
  console.log(chalk.gray(' 创建: vitest.config.ts'));
43
43
  }
44
44
  // 创建 typedoc.json
45
- const typedocConfig = createTypedocConfig({ name: `@feng3d/${name}`, repoName: name });
45
+ const typedocConfig = getTypedocConfig({ name: `@feng3d/${name}`, repoName: name });
46
46
  await fs.writeJson(path.join(projectDir, 'typedoc.json'), typedocConfig, { spaces: 4 });
47
47
  console.log(chalk.gray(' 创建: typedoc.json'));
48
48
  // 创建 src/index.ts
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCzE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgH9E"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAwCzE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9E"}
@@ -5,7 +5,7 @@ import fs from 'fs-extra';
5
5
  import path from 'path';
6
6
  import chalk from 'chalk';
7
7
  import { getDevDependencies } from '../versions.js';
8
- import { gitignoreTemplate, cursorrrulesTemplate } from '../templates.js';
8
+ import { getGitignoreTemplate, getCursorrrulesTemplate, getEslintConfigTemplate, } from '../templates.js';
9
9
  /**
10
10
  * 更新项目的规范配置
11
11
  */
@@ -19,12 +19,12 @@ export async function updateProject(options) {
19
19
  const updateAll = options.all || (!options.eslint && !options.gitignore && !options.cursorrules && !options.deps);
20
20
  // 更新 .gitignore
21
21
  if (updateAll || options.gitignore) {
22
- await fs.writeFile(path.join(projectDir, '.gitignore'), gitignoreTemplate);
22
+ await fs.writeFile(path.join(projectDir, '.gitignore'), getGitignoreTemplate());
23
23
  console.log(chalk.gray(' 更新: .gitignore'));
24
24
  }
25
25
  // 更新 .cursorrules
26
26
  if (updateAll || options.cursorrules) {
27
- await fs.writeFile(path.join(projectDir, '.cursorrules'), cursorrrulesTemplate);
27
+ await fs.writeFile(path.join(projectDir, '.cursorrules'), getCursorrrulesTemplate());
28
28
  console.log(chalk.gray(' 更新: .cursorrules'));
29
29
  }
30
30
  // 更新 eslint.config.js
@@ -42,115 +42,7 @@ export async function updateProject(options) {
42
42
  * 创建 ESLint 配置文件
43
43
  */
44
44
  export async function createEslintConfigFile(projectDir) {
45
- const eslintConfigContent = `// 导入 ESLint 核心模块
46
- import eslint from '@eslint/js';
47
- // 导入 TypeScript ESLint 配置
48
- import tseslint from 'typescript-eslint';
49
- // 导入全局变量定义
50
- import globals from 'globals';
51
-
52
- // 导出 ESLint 配置
53
- export default [
54
- // 忽略检查的文件和目录
55
- {
56
- ignores: [
57
- '**/node_modules/**',
58
- '**/dist/**',
59
- '**/lib/**',
60
- '**/public/**',
61
- '**/coverage/**',
62
- '**/.git/**',
63
- ],
64
- },
65
- // 使用 ESLint 推荐配置
66
- eslint.configs.recommended,
67
- // 使用 TypeScript ESLint 推荐配置
68
- ...tseslint.configs.recommended,
69
- {
70
- // 语言选项配置
71
- languageOptions: {
72
- globals: {
73
- ...globals.browser,
74
- ...globals.node,
75
- ...globals.es2021,
76
- global: false,
77
- },
78
- parserOptions: {
79
- ecmaVersion: 2021,
80
- sourceType: 'module',
81
- tsconfigRootDir: import.meta.dirname,
82
- },
83
- },
84
- rules: {
85
- '@typescript-eslint/no-unused-vars': 'off',
86
- '@typescript-eslint/no-explicit-any': 'off',
87
- 'no-prototype-builtins': 'off',
88
- '@typescript-eslint/ban-ts-comment': 'off',
89
- '@typescript-eslint/no-unused-expressions': 'off',
90
- '@typescript-eslint/no-empty-object-type': 'off',
91
- '@typescript-eslint/no-unsafe-declaration-merging': 'off',
92
- '@typescript-eslint/no-unsafe-function-type': 'off',
93
- '@typescript-eslint/no-this-alias': 'off',
94
- 'prefer-const': 'off',
95
- 'no-fallthrough': 'off',
96
- 'no-constant-binary-expression': 'off',
97
-
98
- // 注释格式规则
99
- 'spaced-comment': ['warn', 'always', {
100
- 'line': { 'markers': ['/'], 'exceptions': ['-', '+'] },
101
- 'block': { 'markers': ['!'], 'exceptions': ['*'], 'balanced': true },
102
- }],
103
-
104
- // 空格和换行规则
105
- 'no-trailing-spaces': ['warn', { 'skipBlankLines': false, 'ignoreComments': false }],
106
- 'no-multiple-empty-lines': ['warn', { 'max': 1, 'maxEOF': 1, 'maxBOF': 0 }],
107
- 'lines-between-class-members': ['warn', 'always', { 'exceptAfterSingleLine': true }],
108
- 'padding-line-between-statements': [
109
- 'warn',
110
- { 'blankLine': 'always', 'prev': '*', 'next': 'return' },
111
- { 'blankLine': 'any', 'prev': ['const', 'let', 'var'], 'next': ['const', 'let', 'var'] },
112
- ],
113
-
114
- // 缩进规则 - 4 空格
115
- 'indent': ['warn', 4, {
116
- 'SwitchCase': 1,
117
- 'VariableDeclarator': 'first',
118
- 'outerIIFEBody': 1,
119
- 'MemberExpression': 1,
120
- 'FunctionDeclaration': { 'parameters': 1, 'body': 1 },
121
- 'FunctionExpression': { 'parameters': 1, 'body': 1 },
122
- 'CallExpression': { 'arguments': 1 },
123
- 'ArrayExpression': 1,
124
- 'ObjectExpression': 1,
125
- 'ImportDeclaration': 1,
126
- 'flatTernaryExpressions': false,
127
- 'ignoreComments': false,
128
- }],
129
-
130
- // 引号规则 - 单引号
131
- 'quotes': ['warn', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': true }],
132
-
133
- // 其他格式规则
134
- 'semi': ['off'],
135
- 'comma-dangle': ['warn', 'always-multiline'],
136
- 'object-curly-spacing': ['warn', 'always'],
137
- 'array-bracket-spacing': ['warn', 'never'],
138
- 'arrow-spacing': ['warn', { 'before': true, 'after': true }],
139
- 'block-spacing': ['warn', 'always'],
140
- 'comma-spacing': ['warn', { 'before': false, 'after': true }],
141
- 'comma-style': ['warn', 'last'],
142
- 'key-spacing': ['warn', { 'beforeColon': false, 'afterColon': true }],
143
- 'keyword-spacing': ['warn', { 'before': true, 'after': true }],
144
- 'space-before-blocks': ['warn', 'always'],
145
- 'space-before-function-paren': ['warn', { 'anonymous': 'always', 'named': 'never', 'asyncArrow': 'always' }],
146
- 'space-in-parens': ['warn', 'never'],
147
- 'space-infix-ops': ['warn'],
148
- 'space-unary-ops': ['warn', { 'words': true, 'nonwords': false }],
149
- },
150
- },
151
- ];
152
- `;
153
- await fs.writeFile(path.join(projectDir, 'eslint.config.js'), eslintConfigContent);
45
+ await fs.writeFile(path.join(projectDir, 'eslint.config.js'), getEslintConfigTemplate());
154
46
  }
155
47
  /**
156
48
  * 更新 package.json 中的 devDependencies 版本
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -2,43 +2,40 @@
2
2
  * 项目模板文件内容
3
3
  */
4
4
  /**
5
- * .gitignore 模板
5
+ * 获取 .gitignore 模板内容
6
6
  */
7
- export declare const gitignoreTemplate = "node_modules\ndist\nlib\npublic\nout\n/package-lock.json\n# \u81EA\u52A8\u751F\u6210\u7684\u6D4B\u8BD5\u914D\u7F6E\u6587\u4EF6\n**/test-config.ts\n# \u6D4B\u8BD5\u6784\u5EFA\u8F93\u51FA\u76EE\u5F55\ntest_dist\n# \u6D4B\u8BD5\u8986\u76D6\u7387\ncoverage\n";
7
+ export declare function getGitignoreTemplate(): string;
8
8
  /**
9
- * .cursorrules 模板
9
+ * 获取 .cursorrules 模板内容
10
10
  */
11
- export declare const cursorrrulesTemplate = "# Cursor \u9879\u76EE\u89C4\u5219\n\n## Git \u63D0\u4EA4\u4FE1\u606F\u89C4\u8303\n\n\u5F53\u751F\u6210 Git \u63D0\u4EA4\u4FE1\u606F\u65F6\uFF1A\n\n1. **\u8BED\u8A00**\uFF1A\u59CB\u7EC8\u4F7F\u7528\u7B80\u4F53\u4E2D\u6587\n\n2. **\u683C\u5F0F**\uFF1A\u9075\u5FAA\u7EA6\u5B9A\u5F0F\u63D0\u4EA4\uFF08Conventional Commits\uFF09\u683C\u5F0F\n ```\n <\u7C7B\u578B>(<\u8303\u56F4>): <\u7B80\u77ED\u63CF\u8FF0>\n\n [\u53EF\u9009\u7684\u8BE6\u7EC6\u8BF4\u660E]\n\n [\u53EF\u9009\u7684\u811A\u6CE8]\n ```\n\n3. **\u63D0\u4EA4\u7C7B\u578B**\uFF08\u4E2D\u6587\u63CF\u8FF0\uFF09\uFF1A\n - `feat`: \u65B0\u589E\u529F\u80FD\n - `fix`: \u4FEE\u590D\u95EE\u9898\n - `refactor`: \u4EE3\u7801\u91CD\u6784\uFF08\u4E0D\u6539\u53D8\u529F\u80FD\uFF09\n - `perf`: \u6027\u80FD\u4F18\u5316\n - `style`: \u4EE3\u7801\u683C\u5F0F\u8C03\u6574\uFF08\u4E0D\u5F71\u54CD\u4EE3\u7801\u542B\u4E49\uFF09\n - `docs`: \u6587\u6863\u66F4\u65B0\n - `test`: \u6D4B\u8BD5\u76F8\u5173\n - `chore`: \u6784\u5EFA\u8FC7\u7A0B\u6216\u8F85\u52A9\u5DE5\u5177\u7684\u53D8\u52A8\n - `build`: \u6784\u5EFA\u7CFB\u7EDF\u6216\u5916\u90E8\u4F9D\u8D56\u9879\u7684\u66F4\u6539\n - `ci`: CI \u914D\u7F6E\u6587\u4EF6\u548C\u811A\u672C\u7684\u66F4\u6539\n\n4. **\u8303\u56F4**\uFF08\u53EF\u9009\uFF09\uFF1A\u53EF\u4EE5\u662F\u6A21\u5757\u3001\u7EC4\u4EF6\u6216\u529F\u80FD\u533A\u57DF\n\n5. **\u63D0\u4EA4\u4FE1\u606F\u8981\u6C42**\uFF1A\n - \u7B2C\u4E00\u884C\u7B80\u77ED\u63CF\u8FF0\uFF0C\u4E0D\u8D85\u8FC7 50 \u4E2A\u5B57\u7B26\n - \u4F7F\u7528\u7948\u4F7F\u53E5\uFF0C\u5982\"\u6DFB\u52A0\"\u3001\"\u4FEE\u590D\"\u3001\"\u4F18\u5316\"\n - \u63CF\u8FF0\u8981\u6E05\u6670\u3001\u5177\u4F53\u3001\u6709\u610F\u4E49\n\n## \u4EE3\u7801\u98CE\u683C\n\n- \u4F18\u5148\u4F7F\u7528 TypeScript\n- \u9075\u5FAA\u73B0\u6709\u4EE3\u7801\u7684\u547D\u540D\u7EA6\u5B9A\u548C\u683C\u5F0F\n- \u6DFB\u52A0\u5FC5\u8981\u7684\u4E2D\u6587\u6CE8\u91CA\u4EE5\u63D0\u9AD8\u4EE3\u7801\u53EF\u8BFB\u6027\n- \u4F7F\u7528 ESLint \u4FDD\u6301\u4EE3\u7801\u683C\u5F0F\u4E00\u81F4\n- \u63D0\u4EA4\u524D\u5FC5\u987B\u901A\u8FC7 lint \u68C0\u67E5\n- \u907F\u514D\u4F7F\u7528 `any` \u7C7B\u578B\uFF0C\u4F18\u5148\u4F7F\u7528\u660E\u786E\u7684\u7C7B\u578B\u5B9A\u4E49\n\n## \u547D\u540D\u89C4\u8303\n\n- **\u53D8\u91CF\u548C\u51FD\u6570**\uFF1A\u4F7F\u7528\u9A7C\u5CF0\u547D\u540D\uFF08camelCase\uFF09\n- **\u7C7B\u548C\u63A5\u53E3**\uFF1A\u4F7F\u7528\u5E15\u65AF\u5361\u547D\u540D\uFF08PascalCase\uFF09\n- **\u5E38\u91CF**\uFF1A\u4F7F\u7528\u5168\u5927\u5199\u4E0B\u5212\u7EBF\u5206\u9694\uFF08UPPER_SNAKE_CASE\uFF09\n- **\u6587\u4EF6\u540D**\uFF1A\u4F7F\u7528\u5C0F\u5199\u5B57\u6BCD\u548C\u8FDE\u5B57\u7B26\uFF08kebab-case\uFF09\u6216\u4E0E\u5BFC\u51FA\u7684\u4E3B\u8981\u7C7B/\u51FD\u6570\u540C\u540D\n\n## \u6CE8\u91CA\u89C4\u8303\n\n- \u516C\u5171 API \u5FC5\u987B\u6DFB\u52A0 JSDoc \u6CE8\u91CA\n- \u590D\u6742\u903B\u8F91\u5FC5\u987B\u6DFB\u52A0\u4E2D\u6587\u6CE8\u91CA\u8BF4\u660E\n- \u4E34\u65F6\u89E3\u51B3\u65B9\u6848\u6216\u5F85\u4F18\u5316\u4EE3\u7801\u5FC5\u987B\u6DFB\u52A0 TODO \u6CE8\u91CA\n- \u6CE8\u91CA\u5E94\u8BE5\u89E3\u91CA\"\u4E3A\u4EC0\u4E48\"\u800C\u4E0D\u662F\"\u662F\u4EC0\u4E48\"\n\n## \u6A21\u5757\u7ED3\u6784\n\n- \u907F\u514D\u4F7F\u7528\u9ED8\u8BA4\u5BFC\u51FA\uFF0C\u4F18\u5148\u4F7F\u7528\u547D\u540D\u5BFC\u51FA\n- \u6BCF\u4E2A\u6587\u4EF6\u5E94\u8BE5\u6709\u4E00\u4E2A\u660E\u786E\u7684\u804C\u8D23\n- \u6BCF\u4E2A\u6587\u4EF6\u5E94\u8BE5\u4E0D\u8D85\u8FC7 300 \u884C\u4EE3\u7801\n- \u76F8\u5173\u529F\u80FD\u5E94\u8BE5\u7EC4\u7EC7\u5728\u540C\u4E00\u4E2A\u76EE\u5F55\u4E0B\n\n## \u6D4B\u8BD5\u89C4\u8303\n\n- \u65B0\u529F\u80FD\u5FC5\u987B\u5305\u542B\u76F8\u5E94\u7684\u6D4B\u8BD5\n- \u4FEE\u590D bug \u65F6\u5FC5\u987B\u6DFB\u52A0\u56DE\u5F52\u6D4B\u8BD5\n- \u6D4B\u8BD5\u8986\u76D6\u7387\u5E94\u8BE5\u4FDD\u6301\u5728\u5408\u7406\u6C34\u5E73\uFF08\u5EFA\u8BAE > 80%\uFF09\n- \u6D4B\u8BD5\u5E94\u8BE5\u6E05\u6670\u3001\u72EC\u7ACB\u3001\u53EF\u91CD\u590D\n\n## Agent \u89C4\u5219\n\n- \u6CA1\u6709\u6B63\u786E\u4FEE\u590D\u95EE\u9898\u65F6\u91CD\u65B0\u4FEE\u590D\u65F6\uFF0C\u5C3D\u91CF\u8FD8\u539F\u4E0A\u6B21\u4FEE\u6539\u7684\u5185\u5BB9\u540E\u518D\u8FDB\u884C\u4FEE\u590D\n- \u6BCF\u6B21\u5B8C\u6210\u4EE3\u7801\u4FEE\u6539\u540E\uFF0C\u5FC5\u987B\u68C0\u67E5\u5E76\u5904\u7406\u7F16\u8BD1\u9519\u8BEF\n- \u786E\u4FDD\u6240\u6709\u6D4B\u8BD5\u901A\u8FC7\u540E\u518D\u544A\u77E5\u7528\u6237\u4EFB\u52A1\u5B8C\u6210\n";
11
+ export declare function getCursorrrulesTemplate(): string;
12
12
  /**
13
- * tsconfig.json 模板
13
+ * 获取 tsconfig.json 模板内容
14
14
  */
15
- export declare const tsconfigTemplate: {
16
- compilerOptions: {
17
- target: string;
18
- module: string;
19
- noImplicitAny: boolean;
20
- sourceMap: boolean;
21
- declarationMap: boolean;
22
- declaration: boolean;
23
- experimentalDecorators: boolean;
24
- emitDeclarationOnly: boolean;
25
- skipLibCheck: boolean;
26
- esModuleInterop: boolean;
27
- downlevelIteration: boolean;
28
- lib: string[];
29
- outDir: string;
30
- };
31
- include: string[];
32
- };
15
+ export declare function getTsconfigTemplate(): object;
33
16
  /**
34
- * vitest.config.ts 模板
17
+ * 获取 vitest.config.ts 模板内容
35
18
  */
36
- export declare const vitestConfigTemplate = "import { defineConfig } from 'vitest/config';\n\nexport default defineConfig({\n test: {\n testTimeout: 0,\n },\n});\n";
19
+ export declare function getVitestConfigTemplate(): string;
37
20
  /**
38
- * typedoc.json 模板
21
+ * 获取 eslint.config.js 模板内容
39
22
  */
40
- export declare function createTypedocConfig(options: {
23
+ export declare function getEslintConfigTemplate(): string;
24
+ /**
25
+ * 获取 typedoc.json 模板内容
26
+ */
27
+ export declare function getTypedocConfig(options: {
41
28
  name: string;
42
29
  repoName: string;
43
30
  }): object;
31
+ /** @deprecated 请使用 getGitignoreTemplate() 函数 */
32
+ export declare const gitignoreTemplate: string;
33
+ /** @deprecated 请使用 getCursorrrulesTemplate() 函数 */
34
+ export declare const cursorrrulesTemplate: string;
35
+ /** @deprecated 请使用 getTsconfigTemplate() 函数 */
36
+ export declare const tsconfigTemplate: object;
37
+ /** @deprecated 请使用 getVitestConfigTemplate() 函数 */
38
+ export declare const vitestConfigTemplate: string;
39
+ /** @deprecated 请使用 getTypedocConfig() 函数 */
40
+ export declare const createTypedocConfig: typeof getTypedocConfig;
44
41
  //# sourceMappingURL=templates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,mQAY7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,4zIA8EhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;CAiB5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,wIAOhC,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAST"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAQT;AAGD,gDAAgD;AAChD,eAAO,MAAM,iBAAiB,QAAyB,CAAC;AACxD,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,QAA4B,CAAC;AAC9D,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,QAAwB,CAAC;AACtD,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,QAA4B,CAAC;AAC9D,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,yBAAmB,CAAC"}
package/dist/templates.js CHANGED
@@ -1,146 +1,63 @@
1
1
  /**
2
2
  * 项目模板文件内容
3
3
  */
4
+ import fs from 'fs-extra';
5
+ import path from 'path';
6
+ import { fileURLToPath } from 'url';
4
7
  /**
5
- * .gitignore 模板
8
+ * 模板目录路径
6
9
  */
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
- `;
10
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
11
+ const TEMPLATES_DIR = path.resolve(__dirname, '../templates');
20
12
  /**
21
- * .cursorrules 模板
13
+ * 获取 .gitignore 模板内容
22
14
  */
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
- `;
15
+ export function getGitignoreTemplate() {
16
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.gitignore'), 'utf-8');
17
+ }
102
18
  /**
103
- * tsconfig.json 模板
19
+ * 获取 .cursorrules 模板内容
104
20
  */
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
- };
21
+ export function getCursorrrulesTemplate() {
22
+ return fs.readFileSync(path.join(TEMPLATES_DIR, '.cursorrules'), 'utf-8');
23
+ }
24
+ /**
25
+ * 获取 tsconfig.json 模板内容
26
+ */
27
+ export function getTsconfigTemplate() {
28
+ return fs.readJsonSync(path.join(TEMPLATES_DIR, 'tsconfig.json'));
29
+ }
123
30
  /**
124
- * vitest.config.ts 模板
31
+ * 获取 vitest.config.ts 模板内容
125
32
  */
126
- export const vitestConfigTemplate = `import { defineConfig } from 'vitest/config';
127
-
128
- export default defineConfig({
129
- test: {
130
- testTimeout: 0,
131
- },
132
- });
133
- `;
33
+ export function getVitestConfigTemplate() {
34
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'vitest.config.ts'), 'utf-8');
35
+ }
36
+ /**
37
+ * 获取 eslint.config.js 模板内容
38
+ */
39
+ export function getEslintConfigTemplate() {
40
+ return fs.readFileSync(path.join(TEMPLATES_DIR, 'eslint.config.js'), 'utf-8');
41
+ }
134
42
  /**
135
- * typedoc.json 模板
43
+ * 获取 typedoc.json 模板内容
136
44
  */
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
- };
45
+ export function getTypedocConfig(options) {
46
+ const templateContent = fs.readFileSync(path.join(TEMPLATES_DIR, 'typedoc.json'), 'utf-8');
47
+ const content = templateContent
48
+ .replace(/\{\{name\}\}/g, options.name)
49
+ .replace(/\{\{repoName\}\}/g, options.repoName);
50
+ return JSON.parse(content);
145
51
  }
52
+ // 为了向后兼容,保留原有的变量导出
53
+ /** @deprecated 请使用 getGitignoreTemplate() 函数 */
54
+ export const gitignoreTemplate = getGitignoreTemplate();
55
+ /** @deprecated 请使用 getCursorrrulesTemplate() 函数 */
56
+ export const cursorrrulesTemplate = getCursorrrulesTemplate();
57
+ /** @deprecated 请使用 getTsconfigTemplate() 函数 */
58
+ export const tsconfigTemplate = getTsconfigTemplate();
59
+ /** @deprecated 请使用 getVitestConfigTemplate() 函数 */
60
+ export const vitestConfigTemplate = getVitestConfigTemplate();
61
+ /** @deprecated 请使用 getTypedocConfig() 函数 */
62
+ export const createTypedocConfig = getTypedocConfig;
146
63
  //# sourceMappingURL=templates.js.map
@@ -1 +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"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAE9D;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAEhC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IAEnC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IAE/B,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IAEnC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IAEnC,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAGhC;IAEG,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3F,MAAM,OAAO,GAAG,eAAe;SAC1B,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC;SACtC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,mBAAmB;AACnB,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;AACxD,mDAAmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;AAC9D,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AACtD,mDAAmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;AAC9D,4CAA4C;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "feng3d-cli",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "feng3d 项目通用标准,包含代码规范、配置模板和 CLI 工具",
5
5
  "homepage": "https://github.com/feng3d-labs/feng3d-cli",
6
6
  "author": "feng",
@@ -1,79 +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
-
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
+
@@ -0,0 +1,108 @@
1
+ // 导入 ESLint 核心模块
2
+ import eslint from '@eslint/js';
3
+ // 导入 TypeScript ESLint 配置
4
+ import tseslint from 'typescript-eslint';
5
+ // 导入全局变量定义
6
+ import globals from 'globals';
7
+
8
+ // 导出 ESLint 配置
9
+ export default [
10
+ // 忽略检查的文件和目录
11
+ {
12
+ ignores: [
13
+ '**/node_modules/**',
14
+ '**/dist/**',
15
+ '**/lib/**',
16
+ '**/public/**',
17
+ '**/coverage/**',
18
+ '**/.git/**',
19
+ ],
20
+ },
21
+ // 使用 ESLint 推荐配置
22
+ eslint.configs.recommended,
23
+ // 使用 TypeScript ESLint 推荐配置
24
+ ...tseslint.configs.recommended,
25
+ {
26
+ // 语言选项配置
27
+ languageOptions: {
28
+ globals: {
29
+ ...globals.browser,
30
+ ...globals.node,
31
+ ...globals.es2021,
32
+ global: false,
33
+ },
34
+ parserOptions: {
35
+ ecmaVersion: 2021,
36
+ sourceType: 'module',
37
+ tsconfigRootDir: import.meta.dirname,
38
+ },
39
+ },
40
+ rules: {
41
+ '@typescript-eslint/no-unused-vars': 'off',
42
+ '@typescript-eslint/no-explicit-any': 'off',
43
+ 'no-prototype-builtins': 'off',
44
+ '@typescript-eslint/ban-ts-comment': 'off',
45
+ '@typescript-eslint/no-unused-expressions': 'off',
46
+ '@typescript-eslint/no-empty-object-type': 'off',
47
+ '@typescript-eslint/no-unsafe-declaration-merging': 'off',
48
+ '@typescript-eslint/no-unsafe-function-type': 'off',
49
+ '@typescript-eslint/no-this-alias': 'off',
50
+ 'prefer-const': 'off',
51
+ 'no-fallthrough': 'off',
52
+ 'no-constant-binary-expression': 'off',
53
+
54
+ // 注释格式规则
55
+ 'spaced-comment': ['warn', 'always', {
56
+ 'line': { 'markers': ['/'], 'exceptions': ['-', '+'] },
57
+ 'block': { 'markers': ['!'], 'exceptions': ['*'], 'balanced': true },
58
+ }],
59
+
60
+ // 空格和换行规则
61
+ 'no-trailing-spaces': ['warn', { 'skipBlankLines': false, 'ignoreComments': false }],
62
+ 'no-multiple-empty-lines': ['warn', { 'max': 1, 'maxEOF': 1, 'maxBOF': 0 }],
63
+ 'lines-between-class-members': ['warn', 'always', { 'exceptAfterSingleLine': true }],
64
+ 'padding-line-between-statements': [
65
+ 'warn',
66
+ { 'blankLine': 'always', 'prev': '*', 'next': 'return' },
67
+ { 'blankLine': 'any', 'prev': ['const', 'let', 'var'], 'next': ['const', 'let', 'var'] },
68
+ ],
69
+
70
+ // 缩进规则 - 4 空格
71
+ 'indent': ['warn', 4, {
72
+ 'SwitchCase': 1,
73
+ 'VariableDeclarator': 'first',
74
+ 'outerIIFEBody': 1,
75
+ 'MemberExpression': 1,
76
+ 'FunctionDeclaration': { 'parameters': 1, 'body': 1 },
77
+ 'FunctionExpression': { 'parameters': 1, 'body': 1 },
78
+ 'CallExpression': { 'arguments': 1 },
79
+ 'ArrayExpression': 1,
80
+ 'ObjectExpression': 1,
81
+ 'ImportDeclaration': 1,
82
+ 'flatTernaryExpressions': false,
83
+ 'ignoreComments': false,
84
+ }],
85
+
86
+ // 引号规则 - 单引号
87
+ 'quotes': ['warn', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': true }],
88
+
89
+ // 其他格式规则
90
+ 'semi': ['off'],
91
+ 'comma-dangle': ['warn', 'always-multiline'],
92
+ 'object-curly-spacing': ['warn', 'always'],
93
+ 'array-bracket-spacing': ['warn', 'never'],
94
+ 'arrow-spacing': ['warn', { 'before': true, 'after': true }],
95
+ 'block-spacing': ['warn', 'always'],
96
+ 'comma-spacing': ['warn', { 'before': false, 'after': true }],
97
+ 'comma-style': ['warn', 'last'],
98
+ 'key-spacing': ['warn', { 'beforeColon': false, 'afterColon': true }],
99
+ 'keyword-spacing': ['warn', { 'before': true, 'after': true }],
100
+ 'space-before-blocks': ['warn', 'always'],
101
+ 'space-before-function-paren': ['warn', { 'anonymous': 'always', 'named': 'never', 'asyncArrow': 'always' }],
102
+ 'space-in-parens': ['warn', 'never'],
103
+ 'space-infix-ops': ['warn'],
104
+ 'space-unary-ops': ['warn', { 'words': true, 'nonwords': false }],
105
+ },
106
+ },
107
+ ];
108
+
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES5",
4
+ "module": "CommonJS",
5
+ "noImplicitAny": false,
6
+ "sourceMap": true,
7
+ "declarationMap": true,
8
+ "declaration": true,
9
+ "experimentalDecorators": true,
10
+ "emitDeclarationOnly": true,
11
+ "skipLibCheck": true,
12
+ "esModuleInterop": true,
13
+ "downlevelIteration": true,
14
+ "lib": ["ES2015", "ES2017", "ES2020", "DOM"],
15
+ "outDir": "lib"
16
+ },
17
+ "include": ["src/**/*.ts"]
18
+ }
19
+
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "{{name}}",
3
+ "$schema": "https://typedoc.org/schema.json",
4
+ "entryPoints": ["src/index.ts"],
5
+ "sourceLinkTemplate": "https://github.com/feng3d-labs/{{repoName}}/tree/master/{path}#L{line}",
6
+ "out": "public/docs"
7
+ }
8
+
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ testTimeout: 0,
6
+ },
7
+ });
8
+