husky自定义目录钩子的正确使用

目前有很多Vue+Prettier+Husky钩子的整合应用,基本都是基于.git与所需钩子的项目在同一目录下使用的,husky钩子会自动根据当前目录的.huskyrc的配置自动执行,而当碰到.git与所需提交目录不在同一层级下,就会出现husky钩子无法正常执行的情况。为了解决这个问题,各种百度谷歌,都没有能够直接看懂的方案,没办法,这时候只能自食其力了。

通过阅读husky官方文档,发现husky其实是支持自定义目录控制的(官方文档)。
也就是说,在.git主目录下的每个子目录(或者说子项目),可以依照自己的规则执行钩子,特别在多个前端项目集成时(非微前端应用),在不影响各项目独自的Prettier配置的情况下,可以实现对子项目独立配置的自动化提交管理,互不影响。当然,这种需求还是比较少见,但总归是碰上了,既然这样那就记录一下。


在子项目里安装husky、commitlint等
(注意,在自定义模式下commitlint不能以dev模式安装,否则无法执行,找不到模块)

npm i husky lint-staged -s --dev
npm i @commitlint/cli @commitlint/config-conventional" -s

安装完毕后,在子目录下建立相关lint-staged.config.js,commitlint.config.js等配置文件,具体配置我这里就不多说了,百度一大堆。

此时在当前子目录下,如果直接执行yarn husky会出现找不到.git文件的错误(因为.git文件在父级木目录下),如果直接进行版本提交也会发现钩子无效,所以需要在当前目录下的package.json增加指令

{
  "scripts": {
    "prepare": "cd .. && husky install 当前子项目目录名/.husky"
  }
}

然后在当前子目录下,运行

yarn prepare

运行完毕后,会在当前目录下生成.husky文件夹
在这里插入图片描述
此时,在当前子目录Cli-base下就可以正常运行yarn husky了
我们尝试运行一下,控制台输出相关使用指令(其实官方文档里也有)则表示成功。

Usage

  husky init
  husky install [dir] (default: .husky)
  husky uninstall
  husky set <file> [cmd]
  husky add <file> [cmd]

Examples
  husky init

  husky install
  husky install .config/husky

  husky set .husky/pre-commit
  husky set .husky/pre-commit "npm test"
  husky set .config/husky/pre-commit "npm test"

  husky add .husky/pre-commit
  husky add .husky/pre-commit "npm test"
  husky add .config/husky/pre-commit "npm test"

按照我们的需求,增加pre-commit,post-commit,commit-msg(按照你自己的钩子需求)

yarn husky add .husky/pre-commit
yarn husky add .husky/post-commit
yarn husky add .husky/commit-msg

.husky目录下则会生成三个对应的指令文件
在这里插入图片描述
我们根据原有.huskyrc配置文件对.husky目录下的指令文件进行配置
这里我举一个例子
原.huskyrc文件:

{
  "hooks": {
    "pre-commit": "lint-staged",
    "post-commit": "git update-index --again",
    "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"
  }
}

修改.husky目录下的pre-commit为

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

cd Cli-base
yarn lint-staged

修改.husky目录下的post-commit为

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

cd Cli-base
git update-index --again

修改.husky目录下的commit-msg为

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

cd Cli-base
yarn commitlint -e $HUSKY_GIT_PARAMS

我们这里默认.git文件在Cli-based的父级目录上,所以只要直接cd Cli-base跳转进来再执行指令就行了。

以上,针对husky自定义目录钩子的调整就结束了,当前子目录下的所有husky指令会通过.husky目录去执行,原huskyrc配置文件则不再使用了,删除就行。

执行git,看看钩子是否生效

git add .
git commit -m "ci: 支持husky自定义目录"

查看输出,出现多个

✨  Done xxx

则表示钩子运行正常。


结束,撒花,希望对你有帮助,如有疑问,欢迎留言。

转载请务必标注作者Banterise,谢谢。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值