Husky 配置与规范落地实战

0 阅读2分钟

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