commit-pack 1.1.5 → 1.1.7
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 +336 -39
- package/bin/index.mjs +282 -91
- package/bin/installWithProgress.js +26 -8
- package/lib/index.mjs +262 -94
- package/package.json +2 -2
- package/setup-script/husky.sh +23 -5
- package/setup-script/lintstagedrc.sh +1 -1
package/README.md
CHANGED
|
@@ -1,64 +1,112 @@
|
|
|
1
|
-
#
|
|
1
|
+
# commit-pack
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
自动化的项目代码质量和提交标准化设置。集成 ESLint、Prettier、Husky、lint-staged、commitlint 和 commitizen,强制执行一致的代码风格和标准化的提交消息。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## ✨ 特性
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
- **代码质量**: 集成 ESLint,支持 TypeScript 解析器和推荐配置
|
|
8
|
+
- **代码格式化**: Prettier 带有预设的格式化规则
|
|
9
|
+
- **Git 钩子**: Husky 驱动的提交前和提交消息验证
|
|
10
|
+
- **暂存文件**: lint-staged 只对暂存文件运行检查
|
|
11
|
+
- **提交验证**: commitlint 确保符合常规提交格式
|
|
12
|
+
- **交互式提交**: commitizen 提供引导式提交创建
|
|
13
|
+
- **多包管理器**: 支持 pnpm、npm、yarn 和 bun
|
|
14
|
+
- **支持 Monorepo**: 使用 `-w` 标志处理基于工作区的项目
|
|
15
|
+
- **安全回滚**: 初始化失败时自动回滚
|
|
8
16
|
|
|
9
|
-
|
|
17
|
+
## 🚀 快速开始
|
|
10
18
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
lint-staged 只对已更改文件检查
|
|
16
|
-
|
|
17
|
-
commitlint 检查提交信息规范性
|
|
18
|
-
|
|
19
|
-
commitizen 自动化脚本生成 commit message
|
|
20
|
-
|
|
21
|
-
vscode 插件
|
|
22
|
-
|
|
23
|
-
## 2. 快速入门
|
|
24
|
-
|
|
25
|
-
</br>
|
|
26
|
-
|
|
27
|
-
### 🚀 安装
|
|
28
|
-
```
|
|
19
|
+
### 安装
|
|
20
|
+
```bash
|
|
21
|
+
# 使用 pnpm
|
|
29
22
|
pnpm add -D commit-pack@latest
|
|
30
23
|
```
|
|
31
|
-
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 使用 bun
|
|
32
27
|
bun add -d commit-pack@latest
|
|
33
28
|
```
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# 使用 npm
|
|
32
|
+
npm install -D commit-pack@latest
|
|
34
33
|
```
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 使用 yarn
|
|
38
37
|
yarn add -D commit-pack@latest
|
|
39
38
|
```
|
|
40
|
-
</br>
|
|
41
39
|
|
|
42
|
-
###
|
|
43
|
-
```
|
|
40
|
+
### 初始化
|
|
41
|
+
```bash
|
|
42
|
+
# 在项目根目录初始化
|
|
44
43
|
pnpm exec commit-pack-init
|
|
45
44
|
```
|
|
46
|
-
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# 使用 bun
|
|
47
48
|
bunx commit-pack-init
|
|
48
49
|
```
|
|
49
|
-
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# 使用 npx
|
|
50
53
|
npx commit-pack-init
|
|
51
54
|
```
|
|
52
|
-
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# 使用 yarn
|
|
53
58
|
yarn dlx commit-pack-init
|
|
54
59
|
```
|
|
55
60
|
|
|
61
|
+
### Monorepo 支持
|
|
62
|
+
```bash
|
|
63
|
+
# 为 monorepo 中的特定工作区初始化
|
|
64
|
+
pnpm exec commit-pack-init -w workspace-name
|
|
65
|
+
# 或
|
|
66
|
+
pnpm exec commit-pack-init --workspace=workspace-name
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## 🛠️ 包含的内容
|
|
70
|
+
|
|
71
|
+
### ESLint 配置
|
|
72
|
+
- 支持 TypeScript 的 `@typescript-eslint/parser`
|
|
73
|
+
- 推荐的 TypeScript 规则
|
|
74
|
+
- 与 Prettier 的集成以避免冲突
|
|
75
|
+
- 适用于 monorepo 的根配置
|
|
56
76
|
|
|
77
|
+
**.eslintrc**
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"root": true,
|
|
81
|
+
"parser": "@typescript-eslint/parser",
|
|
82
|
+
"extends": [
|
|
83
|
+
"eslint:recommended",
|
|
84
|
+
"plugin:@typescript-eslint/recommended",
|
|
85
|
+
"plugin:@typescript-eslint/eslint-recommended",
|
|
86
|
+
"prettier"
|
|
87
|
+
],
|
|
57
88
|
|
|
89
|
+
"plugins": [
|
|
90
|
+
"@typescript-eslint",
|
|
91
|
+
"prettier"
|
|
92
|
+
],
|
|
93
|
+
|
|
94
|
+
"rules": {
|
|
95
|
+
"prettier/prettier": "error",
|
|
96
|
+
"arrow-body-style": "off",
|
|
97
|
+
"prefer-arrow-callback": "off"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
58
101
|
|
|
102
|
+
### Prettier 配置
|
|
103
|
+
- 字符串使用单引号
|
|
104
|
+
- 打印宽度为 100 个字符
|
|
105
|
+
- 不使用分号
|
|
106
|
+
- 支持 Tailwind CSS 插件
|
|
107
|
+
- 一致的间距和格式
|
|
59
108
|
|
|
60
109
|
**.prettierrc**
|
|
61
|
-
|
|
62
110
|
```json
|
|
63
111
|
{
|
|
64
112
|
"singleQuote": true,
|
|
@@ -73,11 +121,198 @@ yarn dlx commit-pack-init
|
|
|
73
121
|
}
|
|
74
122
|
```
|
|
75
123
|
|
|
124
|
+
### Commitlint 配置
|
|
125
|
+
- 强制执行常规提交格式
|
|
126
|
+
- 自定义表情符号前缀的提交类型
|
|
127
|
+
- 范围验证
|
|
128
|
+
- 详细的提交消息结构
|
|
76
129
|
|
|
130
|
+
**.commitlintrc.json**
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"extends": ["@commitlint/config-conventional"],
|
|
134
|
+
"parserPreset": {
|
|
135
|
+
"parserOpts": {
|
|
136
|
+
"headerPattern": "^(.+?)\\((.+?)\\): (.+)$",
|
|
137
|
+
"headerCorrespondence": ["type", "scope", "subject"]
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"rules": {
|
|
141
|
+
"scope-empty": [2, "never"],
|
|
142
|
+
"type-enum": [
|
|
143
|
+
2,
|
|
144
|
+
"always",
|
|
145
|
+
[
|
|
146
|
+
"✨ feat",
|
|
147
|
+
"🐛 fix",
|
|
148
|
+
"🎉 init",
|
|
149
|
+
"✏️ docs",
|
|
150
|
+
"💄 style",
|
|
151
|
+
"♻️ refactor",
|
|
152
|
+
"⚡️ perf",
|
|
153
|
+
"✅ test",
|
|
154
|
+
"⏪️ revert",
|
|
155
|
+
"📦 build",
|
|
156
|
+
"🚀 chore",
|
|
157
|
+
"👷 ci"
|
|
158
|
+
]
|
|
159
|
+
]
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
```
|
|
77
163
|
|
|
78
|
-
|
|
164
|
+
### Commitizen 配置
|
|
165
|
+
- 交互式提交界面
|
|
166
|
+
- 预定义的表情符号提交类型
|
|
167
|
+
- 可自定义范围
|
|
168
|
+
- 引导式提交消息创建
|
|
79
169
|
|
|
80
|
-
|
|
170
|
+
**.cz-config.js**
|
|
171
|
+
```js
|
|
172
|
+
module.exports = {
|
|
173
|
+
types: [
|
|
174
|
+
{ value: "✨ feat", name: " ✨ feat: 新功能" },
|
|
175
|
+
{ value: "🐛 fix", name: " 🐛 fix: 修复bug" },
|
|
176
|
+
{ value: "🎉 init", name: " 🎉 init: 初始化" },
|
|
177
|
+
{ value: "✏️ docs", name: " ✏️ docs: 文档变更" },
|
|
178
|
+
{ value: "💄 style", name: " 💄 style: 更改样式" },
|
|
179
|
+
{ value: "♻️ refactor", name: " ♻️ refactor: 重构" },
|
|
180
|
+
{ value: "⚡️ perf", name: " ⚡️ perf: 性能优化" },
|
|
181
|
+
{ value: "✅ test", name: " ✅ test: 测试" },
|
|
182
|
+
{ value: "⏪️ revert", name: " ⏪️ revert: 回退" },
|
|
183
|
+
{ value: "📦 build", name: " 📦 build: 打包" },
|
|
184
|
+
{ value: "🚀 chore", name: " 🚀 chore: 构建/工程依赖/工具" },
|
|
185
|
+
{ value: "👷 ci", name: " 👷 ci: CI related changes" },
|
|
186
|
+
],
|
|
187
|
+
|
|
188
|
+
scopes: [
|
|
189
|
+
{ name: "components" },
|
|
190
|
+
{ name: "page" },
|
|
191
|
+
{ name: "css" },
|
|
192
|
+
{ name: "api" },
|
|
193
|
+
{ name: "README.md" },
|
|
194
|
+
{ name: "custom" },
|
|
195
|
+
],
|
|
196
|
+
|
|
197
|
+
messages: {
|
|
198
|
+
type: "请选择提交类型(必填)",
|
|
199
|
+
scope: "请选择文件修改范围(必填):",
|
|
200
|
+
customScope: "请输自定义文件修改范围(必填)",
|
|
201
|
+
subject: "请简要描述提交(必填)",
|
|
202
|
+
body: "请输入详细描述(可选)",
|
|
203
|
+
breaking: "列出任何breaking changes(可选)",
|
|
204
|
+
footer: "请输入要关闭的issue(可选)",
|
|
205
|
+
confirmCommit: "确定提交吗",
|
|
206
|
+
},
|
|
207
|
+
|
|
208
|
+
allowCustomScopes: true,
|
|
209
|
+
allowBreakingChanges: ["✨ feat", "🐛 fix"],
|
|
210
|
+
subjectLimit: 49,
|
|
211
|
+
};
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## 📋 可用脚本
|
|
215
|
+
|
|
216
|
+
初始化后,以下脚本将被添加到您的 `package.json` 中:
|
|
217
|
+
|
|
218
|
+
- `lint`: 对所有 TypeScript/JavaScript/JSON 文件运行 ESLint
|
|
219
|
+
- `format`: 使用 Prettier 格式化所有文件
|
|
220
|
+
- `commit`: 使用 commitizen 进行交互式提交
|
|
221
|
+
|
|
222
|
+
## 🤝 贡献
|
|
223
|
+
|
|
224
|
+
1. Fork 仓库
|
|
225
|
+
2. 创建功能分支 (`git checkout -b feature/amazing-feature`)
|
|
226
|
+
3. 进行修改
|
|
227
|
+
4. 运行 linter (`pnpm run lint`) 和格式化 (`pnpm run format`)
|
|
228
|
+
5. 使用 commitizen 界面提交更改 (`pnpm run commit`)
|
|
229
|
+
6. 推送到分支 (`git push origin feature/amazing-feature`)
|
|
230
|
+
7. 创建 Pull Request
|
|
231
|
+
|
|
232
|
+
## ©️ 许可证
|
|
233
|
+
|
|
234
|
+
此项目根据 MIT 许可证授权 - 详见 [LICENSE](LICENSE) 文件。
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
# commit-pack
|
|
239
|
+
|
|
240
|
+
Automated project setup for code quality and commit standardization. Integrates ESLint, Prettier, Husky, lint-staged, commitlint, and commitizen to enforce consistent code style and standardized commit messages.
|
|
241
|
+
|
|
242
|
+
## ✨ Features
|
|
243
|
+
|
|
244
|
+
- **Code Quality**: Integrates ESLint with TypeScript parser and recommended configs
|
|
245
|
+
- **Code Formatting**: Prettier with opinionated formatting rules
|
|
246
|
+
- **Git Hooks**: Husky-powered pre-commit and commit-message validation
|
|
247
|
+
- **Staged Files**: lint-staged runs checks only on staged files
|
|
248
|
+
- **Commit Validation**: commitlint ensures conventional commit format
|
|
249
|
+
- **Interactive Commits**: commitizen provides guided commit creation
|
|
250
|
+
- **Multi-Package Manager**: Supports pnpm, npm, yarn, and bun
|
|
251
|
+
- **Monorepo Ready**: Handles workspace-based projects with `-w` flag
|
|
252
|
+
- **Rollback Safe**: Automatic rollback if initialization fails
|
|
253
|
+
|
|
254
|
+
## 🚀 Quick Start
|
|
255
|
+
|
|
256
|
+
### Installation
|
|
257
|
+
```bash
|
|
258
|
+
# Using pnpm
|
|
259
|
+
pnpm add -D commit-pack@latest
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
# Using bun
|
|
264
|
+
bun add -d commit-pack@latest
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Using npm
|
|
269
|
+
npm install -D commit-pack@latest
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Using yarn
|
|
274
|
+
yarn add -D commit-pack@latest
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Initialization
|
|
278
|
+
```bash
|
|
279
|
+
# Initialize in the root of your project
|
|
280
|
+
pnpm exec commit-pack-init
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
# Using bun
|
|
285
|
+
bunx commit-pack-init
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# Using npx
|
|
290
|
+
npx commit-pack-init
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
# Using yarn
|
|
295
|
+
yarn dlx commit-pack-init
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### Monorepo Support
|
|
299
|
+
```bash
|
|
300
|
+
# Initialize for a specific workspace in monorepo
|
|
301
|
+
pnpm exec commit-pack-init -w workspace-name
|
|
302
|
+
# or
|
|
303
|
+
pnpm exec commit-pack-init --workspace=workspace-name
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## 🛠️ What's Included
|
|
307
|
+
|
|
308
|
+
### ESLint Configuration
|
|
309
|
+
- TypeScript support with `@typescript-eslint/parser`
|
|
310
|
+
- Recommended TypeScript rules
|
|
311
|
+
- Integration with Prettier to avoid conflicts
|
|
312
|
+
- Root configuration to work in monorepos
|
|
313
|
+
|
|
314
|
+
**.eslintrc**
|
|
315
|
+
```json
|
|
81
316
|
{
|
|
82
317
|
"root": true,
|
|
83
318
|
"parser": "@typescript-eslint/parser",
|
|
@@ -100,11 +335,36 @@ yarn dlx commit-pack-init
|
|
|
100
335
|
}
|
|
101
336
|
}
|
|
102
337
|
```
|
|
103
|
-
````
|
|
104
338
|
|
|
339
|
+
### Prettier Configuration
|
|
340
|
+
- Single quotes for strings
|
|
341
|
+
- Print width of 100 characters
|
|
342
|
+
- No semicolons
|
|
343
|
+
- Tailwind CSS plugin support
|
|
344
|
+
- Consistent spacing and formatting
|
|
105
345
|
|
|
106
|
-
**.
|
|
346
|
+
**.prettierrc**
|
|
347
|
+
```json
|
|
348
|
+
{
|
|
349
|
+
"singleQuote": true,
|
|
350
|
+
"printWidth": 100,
|
|
351
|
+
"jsxSingleQuote": true,
|
|
352
|
+
"bracketSameLine": true,
|
|
353
|
+
"semi": false,
|
|
354
|
+
"plugins": ["prettier-plugin-tailwindcss"],
|
|
355
|
+
"tabWidth": 2,
|
|
356
|
+
"bracketSpacing": true,
|
|
357
|
+
"trailingComma": "none"
|
|
358
|
+
}
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Commitlint Configuration
|
|
362
|
+
- Enforces conventional commit format
|
|
363
|
+
- Custom emoji-prefixed commit types
|
|
364
|
+
- Scope validation
|
|
365
|
+
- Detailed commit message structure
|
|
107
366
|
|
|
367
|
+
**.commitlintrc.json**
|
|
108
368
|
```json
|
|
109
369
|
{
|
|
110
370
|
"extends": ["@commitlint/config-conventional"],
|
|
@@ -138,8 +398,13 @@ yarn dlx commit-pack-init
|
|
|
138
398
|
}
|
|
139
399
|
```
|
|
140
400
|
|
|
141
|
-
|
|
401
|
+
### Commitizen Configuration
|
|
402
|
+
- Interactive commit interface
|
|
403
|
+
- Predefined commit types with emojis
|
|
404
|
+
- Customizable scopes
|
|
405
|
+
- Guided commit message creation
|
|
142
406
|
|
|
407
|
+
**.cz-config.js**
|
|
143
408
|
```js
|
|
144
409
|
module.exports = {
|
|
145
410
|
types: [
|
|
@@ -182,3 +447,35 @@ module.exports = {
|
|
|
182
447
|
subjectLimit: 49,
|
|
183
448
|
};
|
|
184
449
|
```
|
|
450
|
+
|
|
451
|
+
## 📋 Available Scripts
|
|
452
|
+
|
|
453
|
+
After initialization, the following scripts will be added to your `package.json`:
|
|
454
|
+
|
|
455
|
+
- `lint`: Run ESLint on all TypeScript/JavaScript/JSON files
|
|
456
|
+
- `format`: Format all files using Prettier
|
|
457
|
+
- `commit`: Interactive commit using commitizen
|
|
458
|
+
|
|
459
|
+
## 🤝 Contributing
|
|
460
|
+
|
|
461
|
+
1. Fork the repository
|
|
462
|
+
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
463
|
+
3. Make your changes
|
|
464
|
+
4. Run the linter (`pnpm run lint`) and formatter (`pnpm run format`)
|
|
465
|
+
5. Commit your changes using the commitizen interface (`pnpm run commit`)
|
|
466
|
+
6. Push to the branch (`git push origin feature/amazing-feature`)
|
|
467
|
+
7. Open a Pull Request
|
|
468
|
+
|
|
469
|
+
## ©️ License
|
|
470
|
+
|
|
471
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
472
|
+
|
|
473
|
+
## 🙏 Acknowledgments
|
|
474
|
+
|
|
475
|
+
- [ESLint](https://eslint.org/) - Pluggable JavaScript linter
|
|
476
|
+
- [Prettier](https://prettier.io/) - Opinionated code formatter
|
|
477
|
+
- [Husky](https://typicode.github.io/husky/) - Git hooks made easy
|
|
478
|
+
- [lint-staged](https://github.com/okonet/lint-staged) - Run linters on staged files
|
|
479
|
+
- [commitlint](https://commitlint.js.org/) - Lint commit messages
|
|
480
|
+
- [commitizen](https://github.com/commitizen/cz-cli) - Interactive commit prompts
|
|
481
|
+
- [TypeScript](https://www.typescriptlang.org/) - Typed JavaScript at any scale
|