Husky
husky是什么
husky是一个管理 Git Hook 的npm工具,在git commit 、 git push 等动作前自动执行代码检查、格式化、测试的脚本。是用来统一团队代码规范,防止不规范commit、语法错误、没格式化的代码被提交
什么是Git钩子
比如在你要提交代码、push代码的时候,Git允许你在这些动作前后插入一段命令,自动执行,这就叫Git钩子,并且hooks是git自带的
比如你要提交代码,git内部流程是:
commit ----> 先跑pre-commit钩子 ----> 检查通过就提交,不通过就不提交
为什么需要husky
.git 文件夹不会上传到任何远程git仓库,你配置的钩子,没人能看见,而husky就是把钩子搬到项目里,能上传远程git仓库,大家共用
核心工作流
plaintext
git add . ----> git commit -m "xxx" ----> husky拦截(运行 pre-commit 钩子) ----> lint-staged ----> eslint + prettier ----> (成功 / 失败)
使用
安装
pnpm add -D husky
启用Git钩子
pnpm husky install
配置自动启用
"script": {
"prepare":"husky install"
// 别人克隆项目后,nom install 会自动启用husky
}
常用的钩子
pre-commit
添加命令
pnpm husky add .husky/pre-commit "pnpm lint-staged"
在提交生效前执行。用来配合eslint + prettier + lint-staged 检查这次提交的文件,自动修复,格式化
commit-msg
pnpm husky add .husky/commit-msg "pnpm commitlint --edit $1"
提交信息写完后执行,在提交前校验message。用来强制规范commit格式,不规范不准提交
pre-push
pnpm husky add .husky/pre-push "pnpm eslint."
git push 前执行,用来跑一遍单元测试,全量eslint检查,防止有问题的代码推到远程
跳过钩子(临时不校验)
提交时加 --no-verify
用于紧急提交、修复冲突后不想被校验卡住、测试钩子是否正常拦截
卸载 / 关闭 钩子
卸载
pnpm remove husky
然后删除 .husky 文件夹即可
只关闭,不卸载
pnpm husky uninstall
重新启动
pnpm husky install
多项目 / Monorepo 支持
Husky默认只在根目录 .git 下工作,如果要多项目配置,需要先进入子项目,再进行检查
在根目录安装husky,并启用
pnpm add -D husky -w
pnpm husky install
在钩子中指定子项目
cd packages/<子项目> && pnpm lint-staged 有多个后面再重复加就好了
prepare脚本放在根 package.json,因为只有根目录有git文件并且能装husky