代码提交规范
要让 npm 项目提交的代码符合 Git Commits 规范(如 Conventional Commits),需通过工具链约束提交格式、自动校验及生成日志。以下是详细实施步骤:
以下是将提供的操作整理成的Markdown表格:
类型 | 含义 | 示例 | 描述 |
---|---|---|---|
feat | 新增功能(feature) | feat: add night mode to the application | 描述新功能的添加,如新增用户界面特性或后端服务功能 |
fix | 修复错误(bug fix) | fix: resolve null pointer exception in user login | 修复代码中的错误或问题,确保程序行为符合预期 |
style | 代码样式修改(不影响逻辑) | style: update code formatting according to ESLint rules | 改进代码风格(如缩进、空格、换行),不改变功能 |
revert | 回滚之前的提交 | revert: 回滚feat: 增加用户注册功能 | 直接明确回滚历史代码或功能模块 |
build | 构建系统/外部依赖变更 | build: 升级webpack到版本5 | 影响构建系统的更改(如打包配置、依赖升级) |
refactor | 代码重构(不改变功能) | refactor: simplify complex function logic | 优化代码结构而不改变外部行为 |
docs | 文档更新 | docs: update installation guide for v2.0 | 更新README、API文档等说明性内容 |
test | 测试相关更改 | test: add unit tests for new feature | 添加或修改测试用例 |
chore | 维护任务 | chore: update package.json dependencies | 日常维护(如更新依赖项、配置文件) |
perf | 性能优化 | perf: optimize database query performance | 针对性能提升的代码优化 |
ci | 持续集成配置变更 | ci: configure GitHub Actions for automated testing | 更新CI/CD流水线配置(如GitHub Actions/Jenkins) |
说明:
- 前缀规范:所有类型均使用英文小写前缀(如
feat
/fix
) - 语义化提交:示例遵循
<类型>: <描述>
的格式(如feat: add night mode
) - 作用范围:
style
仅涉及代码风格(如格式化规则)revert
需明确标注被回滚的提交build
和ci
区分:前者影响项目构建,后者涉及自动化流程配置
一、安装 Commitizen 工具(规范提交信息)
作用:交互式生成符合规范的提交信息,替代 git commit
。
步骤:
bash
# 全局安装(推荐)
npm install -g commitizen cz-conventional-changelog
# 配置适配器
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
- 使用方式:
提交时运行git cz
或npm run commit
(若项目局部安装),按提示填写:type
:选择提交类型(如 feat、fix、docs)。scope
:输入影响范围(如模块名)。subject
:简短描述(必填)。body/footer
:详细说明或关联 issue(可选)。
二、定制中文提交提示(可选)
替换默认英文提示为中文:
bash
npm install --save-dev cz-customizable
创建 .cz-config.js
文件:
javascript
module.exports = {
types: [
{ value: "feat", name: "feat: 新功能" },
{ value: "fix", name: "fix: 修复Bug" },
// 其他类型(docs/style/refactor等)
],
messages: {
type: "选择提交类型:",
scope: "影响范围(如模块名):",
subject: "简短描述(必填):",
// ...其他配置
}
};
在 package.json
中指定适配器:
json
{
"config": {
"commitizen": {
"path": "node_modules/cz-customizable"
}
}
}
三、配置 Commitlint + Husky(强制校验)
作用:通过 Git 钩子拦截不符合规范的提交。
步骤:
安装依赖:
bashnpm install --save-dev @commitlint/cli @commitlint/config-conventional husky
创建校验规则:
在commitlint.config.js
中:javascriptmodule.exports = { extends: ["@commitlint/config-conventional"] };
启用 Husky 钩子:
在package.json
中添加:json{ "husky": { "hooks": { "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } } }
- 提交时自动校验,格式错误则拒绝提交(示例错误:
git commit -m "update code"
会报错)。
- 提交时自动校验,格式错误则拒绝提交(示例错误:
四、集成代码风格检查(增强规范)
在提交前自动检查代码风格(如 ESLint/Standard):
安装 ESLint:
bashnpm install --save-dev eslint npx eslint --init # 生成配置文件
配置 Husky 的
pre-commit
钩子:
在package.json
中:json{ "husky": { "hooks": { "pre-commit": "eslint src/**/*.js", // 检查指定目录 "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } } }
- 代码不符合规范时,提交将被终止。
五、规范提交流程示例
添加文件到暂存区:
bashgit add .
触发交互式提交:
bashgit cz # 或 npm run commit
- 按提示填写类型、范围、描述等。
自动触发流程:
- Husky 执行
pre-commit
(代码检查)。 - Husky 执行
commit-msg
(信息格式校验)。 - 全部通过后提交成功。
- Husky 执行
六、自动生成变更日志(Changelog)
利用规范提交自动生成日志:
bash
npm install -g conventional-changelog-cli
conventional-changelog -p angular -i CHANGELOG.md -s
- 每次发布新版本时运行,自动提取
feat
/fix
等类型提交到日志。
七、NPM 版本管理规范
结合语义化版本(SemVer):
bash
npm version patch # 修复Bug(0.0.1 → 0.0.2)
npm version minor # 新增功能(0.0.2 → 0.1.0)
npm version major # 破坏性变更(0.1.0 → 1.0.0)
- 自动创建 Git Tag(如
v1.0.0
)。
总结:完整工具链
工具 | 作用 | 关键配置 |
---|---|---|
Commitizen | 交互式生成规范提交信息 | .cz-config.js (中文支持) |
Commitlint | 校验提交信息格式 | commitlint.config.js |
Husky | Git 钩子管理 | pre-commit /commit-msg |
ESLint | 代码风格检查 | .eslintrc.js |
conventional-changelog | 自动生成变更日志 | 版本发布时执行 |
通过以上步骤,团队可确保所有提交符合 类型化+作用域+描述 的规范(如
fix(login): 修复密码验证逻辑
),提升代码可维护性和自动化效率。