Husky 是一个非常轻量且实用的工具,它帮助你在使用 Git 进行代码提交和推送时,自动运行一些自定义的脚本,比如代码格式化、代码检查和测试,保证代码质量,让团队协作更加规范和高效。
什么是 Husky 和 Git Hooks?
- Git Hooks 是 Git 自带的功能,它允许你在 Git 的某些操作阶段(如提交代码前、推送代码前)自动执行脚本。
- Husky 是一个工具,帮你更方便地管理和使用这些 Git Hooks。它会在你的项目里创建一个
.husky
文件夹,里面放置各种钩子脚本。这样,团队成员都能用相同的钩子配置,避免每个人手动设置不同的钩子,保证一致性。
Husky 的主要作用
- 自动运行代码检查:比如在提交前自动运行 ESLint 检查代码风格,或者 Prettier 格式化代码。
- 自动运行测试:提交或推送代码前自动跑单元测试,防止有错误代码进入仓库。
- 规范提交信息:检查提交信息是否符合规范,方便后续自动生成变更日志。
- 减少人为疏忽:自动执行这些任务,避免忘记执行检查导致的问题。
- 支持多种 Git 钩子 :如
pre-commit
(提交前)、pre-push
(推送前)、commit-msg
(提交信息校验)等。
如何快速开始使用 Husky?
1. 环境准备
- 需要先安装好 Git(版本推荐 2.9 以上)。
- 项目已经初始化 Git 仓库(执行
git init
)。
2. 安装 Husky
推荐使用一条命令快速安装并初始化:
bash
npx husky-init && npm install
这条命令会完成以下工作:
- 安装 Husky 依赖。
- 在项目根目录生成
.husky
文件夹。 - 在
package.json
中添加"prepare": "husky install"
脚本,确保每次安装依赖时都启用 Husky。 - 默认生成一个
pre-commit
钩子,里面执行npm test
。
3. 添加和管理钩子
比如你想在每次提交代码前,先运行测试,可以执行:
bash
npx husky add .husky/pre-commit "npm test"
git add .husky/pre-commit
这样,每次执行 git commit
,都会先运行 npm test
,测试失败则阻止提交。
4. 配置测试脚本
确保你的 package.json
中有对应的测试命令,例如:
json
"scripts": {
"test": "echo "测试通过" && exit 0"
}
真实项目中,这里通常是运行单元测试或其他验证脚本。
5. 配合 lint-staged 只检查变更文件(提升效率)
安装 lint-staged
:
bash
npm install --save-dev lint-staged
在 package.json
中添加配置:
json
"lint-staged": {
"*.js": ["eslint --fix", "prettier --write", "git add"]
}
修改 .husky/pre-commit
文件内容:
text
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx lint-staged
这样,提交时只会针对暂存区(即本次提交的文件)运行格式化和检查,速度更快。
6. 其他常用钩子示例
- 推送前检查测试:
bash
npx husky add .husky/pre-push "npm test"
- 提交信息校验(结合 commitlint) :
bash
npx husky add .husky/commit-msg "npx --no-install commitlint --edit "$1""
代码示例:完整的 Husky + lint-staged 配置
bash
# 安装依赖
npm install husky lint-staged eslint prettier --save-dev
# 初始化 husky
npx husky install
# 在 package.json 添加 prepare 脚本
# "prepare": "husky install"
# 添加 pre-commit 钩子,运行 lint-staged
npx husky add .husky/pre-commit "npx lint-staged"
# package.json 配置示例
{
"scripts": {
"prepare": "husky install",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
"format": "prettier --write ."
},
"lint-staged": {
"*.{js,jsx,ts,tsx}": [
"eslint --fix",
"prettier --write",
"git add"
]
}
}
这样,每次提交时,Husky 会自动调用 lint-staged,只对改动的 JavaScript/TypeScript 文件运行 ESLint 和 Prettier,自动修复并格式化代码,保证提交的代码整洁规范。
卸载 Husky
如果不再需要 Husky,可以这样卸载:
bash
npm uninstall husky
git config --unset core.hooksPath
rm -rf .husky
并从 package.json
中删除 "prepare": "husky install"
脚本。
总结
- Husky 是管理 Git Hooks 的利器,帮助你在提交和推送代码时自动执行代码检查、格式化和测试。
- 它极大地减少了人为疏忽,保证代码质量和团队协作效率。
- 配合 lint-staged 使用,可以只检查改动文件,提升速度和体验。
- 只需几条命令即可安装配置,适合所有使用 Git 的项目。
用 Husky,让你的代码提交更安全、更规范、更高效!