Husky入门
使用Husky,编写脚本,在代码提交之前,自动对代码进行格式化、优化、自定义。
官方文档: https://typicode.github.io/husky/#/
简介
当你commit
或者push
的时候, 你可以使用它来对commit
、run
、test
、lint code
等进行lint 处理。Husky
支持所有的 Git hooks。
一键使用
husky-init
是一个一次性命令,用于快速初始化带有 husky 的项目。
npx husky-init && npm install # npm
npx husky-init && yarn # Yarn 1
yarn dlx husky-init --yarn2 && yarn # Yarn 2+
pnpm dlx husky-init && pnpm install # pnpm
它将设置 husky,修改 package.json
并创建一个可以编辑的示例 pre-commit
钩子。默认情况下,commit
时它将运行 npm
测试。
要添加另一个钩子,则可使用husky add .
。
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'
手册
Yarn 2+
不支持编写生命周期脚本,所以husky
需要以不同的方式安装(但这不适用于 Yarn 1
)。
-
安装
npm install husky --save-devprivate
Yarn 2
:yarn add husky --dev yarn add pinst --dev # ONLY if your package is not private
-
开启githooks
npx husky install
Yarn 2
:yarn husky install
-
要在安装后自动启用 Git hooks,请编辑
package.json
npm pkg set scripts.prepare="husky install"
// package.json { "scripts": {"prepare": "husky install" } }
Yarn 2
:// package.json { "private": true, // ← your package is private, you only need postinstall "scripts": {"postinstall": "husky install" } }
创建一个钩子
要向钩子添加命令或创建新的钩子,可以使用 husky add <file> [ cmd ]
(不要忘记在此之前运行 husky install
)。
npx husky add .husky/pre-commit "npm test"
git add .husky/pre-commit
表示当你提交时,如果npm test
失败,提交将自动停止
卸载
yarn remove husky && git config --unset core.hooksPath
自定义目录
如果希望在另一个目录中安装 husky
, 例如.config
,您可以将其传递给 install
命令。例如:
// package.json
{"scripts": {"prepare": "husky install .config/husky"}
}
绕过 hooks
您可以使用 Git -n/—— no-verify
选项绕过 pre-commit
和 commit-msg
钩子:
git commit -m "yolo!" --no-verify
在 CI/Docker/Prod 中禁用husky
在 CI/Docker/Prod 上下文中没有禁用 Husky 的正确或错误方法,并且高度依赖于您的用例。
- npm
如果要防止husky
完全安装
npm ci --omit=dev --ignore-scripts
或者
npm pkg delete scripts.prepare
npm ci --omit=dev
- 自定义脚本
"prepare": "node ./prepare.js"
// prepare.js
const isCi = process.env.CI !== undefined
if (!isCi) {require('husky').install()
}
- env变量
你可以在你的 CI
配置文件中将 HUSKY
环境变量设置为0
,禁用钩子安装。
# .husky/pre-commit
# ...
[ -n "$CI" ] && exit 0
- is-ci
npm install is-ci --save-dev
// package.json
{"scripts": {"prepare": "is-ci || husky install"}
}
测试钩子
如果您想要测试一个钩子,您可以在脚本的末尾添加exit 1
来终止 git 命令。
# .husky/pre-commit
# ...
exit 1 # Commit will be aborted
样例
// package.json
{//..."scripts": {//..."lint:lint-staged": "lint-staged","prepare": "husky install",},// ..."devDependencies": {"husky": "7.0.4","lint-staged": "12.3.7","prettier": "2.6.2","stylelint": "14.7.1",},// ..."lint-staged": {"*.{js,jsx,ts,tsx}": ["eslint --fix","prettier --write"],"{!(package)*.json,*.code-snippets,.!(browserslist)*rc}": ["prettier --write--parser json"],"package.json": ["prettier --write"],"*.vue": ["eslint --fix","prettier --write","stylelint --fix"],"*.{scss,less,styl,html}": ["stylelint --fix","prettier --write"],"*.md": ["prettier --write"]}
}
# .husky/pre-commit
[ -n "$CI" ] && exit 0npm run lint:lint-staged
配置完成后,在向git提交之前都会进行一系列代码格式化。
引用
Husky官方文档: https://typicode.github.io/husky/#/