本文简单记录下Husky的用法,如何用来校验git的提交格式。原理就是git hook各种生命周期去做校验,本文只简单罗略用法,不想篇幅过长阅读起来累🥱,原理跟细节不展开说有兴趣的直接去找git hook相关资料。
一、Husky安装
1、安装Husky,我这里的husky版本是"husky": "^9.0.11"
npm install --save-dev husky
2、安装后初始化一下
npx husky init
前面两步执行完之后,就会在项目目录自动生成一个.husky文件夹,然后package.json里面也会多一行代码
"scripts": {
"prepare": "husky"
}
文件夹里面会默认有一个pre-commit文件。当执行git commit的时候就会自动执行该文件里面脚本。不过本次我们不需要在这里写,后期的自动校验代码就需要。本次只演示git提交格式校验。
二、校验git消息格式
1、在项目根目录创建一个scripts目录,里面创建一个verify-commit.js文件,内容如下:
/* eslint-disable no-undef */
import chalk from 'chalk'
// argv[2]参数就是commit-msg消息的文件路径,里面放的就是commit -m后面的消息内容
const msgPath = process.argv[2]
import * as fs from 'node:fs'
const msg = fs
.readFileSync(msgPath, 'utf-8')
.trim()
const commitRE = /^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|release)(\(.+\))?: .{1,50}/
if (!commitRE.test(msg)) {
console.error(
` ${chalk.bgRed.white(' ERROR ')} ${chalk.red(
'不合法的 commit 消息格式'
)}\n\n`
+ chalk.red(
' 请使用正确的提交格式:\n\n'
)
+ ` ${chalk.green('feat: add \'comments\' option')}\n`
+ ` ${chalk.green('fix: handle events on blur (close #28)')}\n\n`
+ chalk.red(' 请查看 git commit 提交规范:https://jdf2e.github.io/jdc_fe_guide/docs/git/commit/。\n')
)
process.exit(1)
}
原理就是当我们执行git commit -m "xxx"的时候,husky去执行这个文件,当校验不通过的时候,就结束node进程。那如何让git提交的时候执行这个文件呢?接下来就是用到commit-msg这个生命周期了。
2、在.husky目录创建一个文件,名字叫commit-msg。内容是:
node scripts/verify-commit.js $1
这样就完成了,文件的命名就是git hook的生命周期,git操作会自动触发。
三、校验
随便写个提交
git commit -m "dddd"
大功告成!这样就能规范化提交格式了。