husky
husky 是什么?
Husky improves your commits and more 🐶 woof!特性
- Just
2 kB
(📦 gzipped) with no dependencies - Extremely fast (runs in
~1ms
) - Uses new Git feature (
core.hooksPath
) - Supports:
- macOS, Linux, Windows
- Git GUIs, Node version managers, custom hooks directory, nested projects, monorepos
- All 13 client-side Git hooks
And more:
- Branch-specific hooks
- Use POSIX shell to script advanced cases
- Adheres to Git's native hook organization
- Aligns with npm best practices using
prepare
script - Opt-in/opt-out options
- User-friendly error messages
- 使用
package.json中
"scripts": {
"prepare": "husky install"
}
使用 husky 的时候,我们通常只关注 提交工作流 的几个 hooks,用得最多的一个是 pre-commit。
# 创建一个 pre-commit 的 hooks 文件
npx husky add .husky/pre-commit "npm test" # npm
pnpx husky add .husky/pre-commit "npm test" # pnpm
git add .husky/pre-commit
# 创建好这个文件之后,你就可以根据你的需要去编写这个 shell 脚本了
注意:在客户端 hooks 中,developer 可以通过 git comiit -m "commit message" -n (-n 等价于 --no-verify) 来忽略掉 pre-commit hook 的执行!
lint-staged
在起初的开发过程中,项目小,代码量少,全量跑一次 lint 的时间也相对较短。但随着项目体量的增大,全量跑一次 lint 的时间越来越长。而我们都知道,如果每一个人提交的代码都是通过了 lint 工具的格式化,那么在一次提交的时候,可能没有规范化的文件,就仅仅是当前 developer 即将提交的这些。如果在一次提交的时候,只对这一部分代码做规范化,那将大大缩短 developer 提交代码的速度,于是就诞生了一个工具:lint-staged。
通过这个工具诞生的背景,我们可以知道, lint-staged 是一个专门用于在通过 git 提交代码之前,对暂存区的代码执行一系列的格式化。当 lint-staged 配合 git hooks 使用时,可以在 git 提交前的 hook 中加入 lint-staged 命令,这样就能在提交代码之前,对即将提交的代码进行格式化,成功之后就会提交代码。
- 使用
package.json中
{
"lint-staged": {
"<glob-pattern>": <command>
}
}