在刚学习husky的时候是把husky的脚本放在了package.json里面,但是我发现这样钩子根本不执行,在知乎上看到有一位作者提到了在husky6以后做了破坏性改动,之前的方法不能使用了。
// husky6之后已经无法使用
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
"pre-commit": "npm run test"
}
},
新版的husky推荐我们在scripts里面加入脚本: "prepare": "husky install",根据npm官方文档的说法,prepare属于npm的一个生命周期钩子
Life Cycle Scripts
There are some special life cycle scripts that happen only in certain situations. These scripts happen in addition to the
pre<event>,post<event>, and<event>scripts.
prepare,prepublish,prepublishOnly,prepack,postpack,dependencies
这个钩子会在每次npm i的时候执行,该命令会创建.husky/目录并指定该目录为git hooks所在的目录。 随后,在根目录下会生成一个.husky文件,这个文件夹下就可以写钩子了。
在命令行输入:npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"' 即可在.husky目录下添加一个commit-msg钩子。
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npx --no-install commitlint --edit $1
# # 或者
# export GIT_PARAMS=$1
# npx commitlint -E GIT_PARAMS
在钩子中加入上面的命令,这个命令表示的是使用commitlint检查git提交的参数。--no-install表示不安装新包,使用node_modules下面的包。
// commitlint配置文件
module.exports = {
extends: ['@commitlint/config-conventional']
};
在.commilintrc.js配置文件中我使用了一个预设,这个预设规定了一些前缀,详细查看:www.npmjs.com/package/@co…
这样就完成了husky8对git提交格式的校验了。
---------------2023-4-17日更新
今天查看了commitlint的文档后才知道,在npx --no-install commitlint --edit $1这句话中,--edit是commitlint的参数,并不是npm的参数,官方原文对--edit表述为:
read last commit message from the specified file or fallbacks to ./.git/COMMIT_EDITMSG [string]
这句话的中文意思是:用于从指定文件中读取上一次提交的消息,若不指定则默认从./.git/COMMIT_EDITMSG中读取。
而上面的$1,表示的是提交信息所在的文件的路径,通常是在 .git/COMMIT_EDITMSG,也就是说其实不加$1也是可以的:npx --no-install commitlint --edit。
最后附上commitlint的所有参数
- -c, --color:用于切换彩色输出(默认值为true)。
- -g, --config:用于指定配置文件的路径。
- --print-config:用于输出解析后的配置信息。
- -d, --cwd:用于指定执行命令的目录,如果不指定即为当前工作目录。
- -e, --edit:用于从指定文件中读取上一次提交的消息,若不指定则默认从./.git/COMMIT_EDITMSG中读取。
- -E, --env:用于检查某个环境变量指定路径下的提交消息。
- -x, --extends:用于指定要扩展的可共享配置列表。
- -H, --help-url:用于在错误消息中指定帮助url。
- -f, --from:用于指定需要验证的提交的范围的下限(仅当edit=false时生效)。
- -o, --format:用于指定输出结果的格式。
- -p, --parser-preset:用于指定用于常规提交解析器的配置预设。
- -q, --quiet:用于切换控制台输出(默认值为false)。
- -t, --to:用于指定需要验证的提交的范围的上限(仅当edit=false时生效)。
- -V, --verbose:用于在无问题的报告中启用详细输出。
- -v, --version:用于显示版本信息。
- -h, --help:用于显示帮助信息。
参考:
知乎文章地址:zhuanlan.zhihu.com/p/366786798
npm文档:docs.npmjs.com/cli/v9/comm…
commitlint文档:commitlint.js.org/#/reference…