怎么实现 commit lint?
参考答案:
实现 Commit Lint 的步骤
Commit Lint 是一种对 Git 提交信息进行格式化检查的工具,通常用于确保提交信息符合团队约定(例如 Conventional Commits 标准),提高代码可维护性和提交信息的可读性。
以下是实现 Commit Lint 的具体步骤:
1. 安装必要的依赖
依赖工具:
commitlint:用于校验提交信息。@commitlint/config-conventional:遵循 Conventional Commits 的预设规则。husky:用于 Git 钩子管理。
执行以下命令:
bash
npm install --save-dev @commitlint/{config-conventional,cli} husky2. 配置 Commit Lint
在项目根目录创建 commitlint.config.js 文件:
javascript
module.exports = {
extends: ['@commitlint/config-conventional'],
};3. 初始化 Husky
Husky 用于触发 Git 钩子,在 commit-msg 阶段执行 Commit Lint。
初始化 Husky:
bashnpx husky install在
package.json中添加一条安装后自动启用 Husky 的脚本:json{ "scripts": { "prepare": "husky install" } }添加
commit-msg钩子:bashnpx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'这会在
.husky/commit-msg文件中添加如下内容:bash#!/bin/sh . "$(dirname "$0")/_/husky.sh" npx --no-install commitlint --edit "$1"
4. 验证提交信息
使用 Conventional Commits 规范,以下是一些符合规范的提交示例:
feat: add new login featurefix: correct header display issuedocs: update README with usage instructionsstyle: fix formatting for CSS
如果提交信息不符合规范,提交会被拦截,并提示错误信息。
5. 自定义规则(可选)
如果团队有自定义的提交规范,可以在 commitlint.config.js 中添加规则。例如:
javascript
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
2,
'always',
['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore'],
],
'header-max-length': [2, 'always', 72], // 限制标题长度为 72 字符
},
};6. 配合 lint-staged(可选)
为了确保提交代码时执行代码格式化和检查,可以引入 lint-staged。
安装依赖:
bash
npm install --save-dev lint-staged在 package.json 中添加:
json
{
"lint-staged": {
"*.js": ["eslint --fix", "git add"]
}
}通过 Husky 添加 pre-commit 钩子:
bash
npx husky add .husky/pre-commit 'npx lint-staged'7. 测试流程
- 执行
git commit,输入符合或不符合规范的提交信息。 - 检查是否会被拦截,确认 Commit Lint 是否生效。
题目要点:
实现 Commit Lint 需要依赖 commitlint 和 husky,关键点是通过 Git 钩子(commit-msg)拦截不符合提交规范的信息。同时,你可以根据团队需求自定义规则,配合 lint-staged 等工具进一步规范开发流程。