Husky入门
使用Husky,编写脚本,在代码提交之前,自动对代码进行格式化、优化、自定义。
官方文档: https://typicode.github.io/husky/#/
简介
当你
commit
或者
push
的时候, 你可以使用它来对
commit
、
run
、
test
、
lint code
等进行lint 处理。
Husky
支持所有的 Git hooks。
一键使用
husky-init
是一个一次性命令,用于快速初始化带有 husky 的项目。
npx husky-init &&npminstall# npm
npx husky-init &&yarn# Yarn 1yarn dlx husky-init --yarn2&&yarn# Yarn 2+pnpm dlx husky-init &&pnpminstall# 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
)。
- 安装
npminstall husky --save-devprivate``````Yarn 2
:yarnadd husky --devyarnadd pinst --dev# ONLY if your package is not private
- 开启githooks
npx husky install``````Yarn 2
:yarn husky install
- 要在安装后自动启用 Git hooks,请编辑
package.json``````npm pkg setscripts.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"gitadd .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.jsconst isCi = process.env.CI!==undefinedif(!isCi){require('husky').install()}
- env变量
你可以在你的
CI
配置文件中将
HUSKY
环境变量设置为
0
,禁用钩子安装。
# .husky/pre-commit# ...[-n"$CI"]&&exit0
- is-ci
npminstall 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"]&&exit0npm run lint:lint-staged
配置完成后,在向git提交之前都会进行一系列代码格式化。
引用
Husky官方文档: https://typicode.github.io/husky/#/
版权归原作者 HHoao 所有, 如有侵权,请联系我们删除。