为了维护专案程序码的品质,我们需要对提交的代码做各式的检查(例如: Lint 、 Format 、 Unit Testing 等),而检查的时机点就位於各个 Git hooks 上。
Git hooks 让开发者可以在对应的 hook 注册脚本, Git 触发这些 hooks 时就会执行这些脚本去做对应的处理。
Husky 是个 npm 套件,它让使用者可以用直觉的操作方式注册各式 hooks 事件,将各式的处理配置於各个 hooks 中。
在安装完成後於 .husky
目录下设定对应的 Git hook 名称档案(例如: pre-commit
、 commit-msg
),在 Git hooks 触发时就会执行对应的指令。
Husky 提供了一个初始化的指令 husky-init
,在专案的 package.json
目录下指令:
npx husky-init && npm install
husky-init
会修改 package.json
:
{
"devDependencies": {
"husky": "^7.0.0"
},
"scripts": {
"prepare": "husky install"
}
}
它会加上 Husky 的相依并在 prepare
script 中加上 husky install
,这样一来在 npm install
运行时就会执行 Husky 的安装程序。
Husky 的使用方式是为各个 Git Hooks 脚本加入想要执行的指令, Husky 就会在对应的时机触发此脚本执行。
要在特定 Git Hook 加入指令时可以下 husky add
指令:
npx husky add .husky/pre-commit 'echo "hello"'
上面的指令会在 .husky
目录中建立一个名为 pre-commit
的档案,其内容为:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
echo "hello"
当名为 pre-commit
的 Git hook 触发时,这个档案的指令就会被执行,它会在画面上显示字串 hello
:
> git commit -m 'add husky script pre-commit'
hello
# ...
也可以直接在
.husky
目录中加上对应的 Git Hook 脚本,但要记得加上. "$(dirname "$0")/_/husky.sh"
。
各 Git Hooks 的名称可以在 「Git Documentation: Customizing Git - Git Hooks」 中找到,依照需求对特定的 Hooks 增加指令。
Husky 的预设配置目录为 .husky
,如果要客制配置目录(例如: .config/husky
)的话,会需要给予 husky install
配置目录的路径:
{
"scripts": {
"prepare": "husky install .config/husky"
}
}
另外因为 Husky 预设执行 husky install
的目录要与 .git
相同,所以当 .git
与 package.json
的目录不同时,需要先使用 cd
指令移动当前位置再执行 husky install
。
以下面的例子来说:
project
|- .git
|- /front
|- .husky
|- package.json
project/front/package.json
的 prepare
script 应该要如下:
{
"scripts": {
"prepare": "cd .. && husky install front/.husky"
}
}
指令要先向上移一层,并且由於配置目录 .husky
在 project/front/.husky
,对上移一层再执行的 husky install
指令来说并非预设的目录,因此要特别指定 front/.husky
。
非预设的配置目录,其执行的脚本都需要重新设定当前的位置:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
cd front
echo "hello"
上面的范例是脚本 project/front/.husky/pre-commit
,由於当前目录位於 project
,因此需要重新指到 .husky
所在的目录 front
中。
为了让修改生效,在编辑完 husky install
相关的设定後,请重新执行 npm install
:
npm install
这会执行 husky install
并将修改後的配置注册至 Git hooks 中。
husky add
对特定的 Git Hook 加入执行脚本。prepare
时要指定目录,并在脚本执行时移动至此目录。
<<: [Day 21] Edge Impulse + BLE Sense实现唤醒词辨识(中)
>>: [22] [Discord 机器人] 02.掷骰机器人
Reasons for a slow Computer System**** Too many st...
昨天介绍完单层感知机模型演算法,今天要来研究单层感知机模型程序: 首先先把x资料做标准化 #个别标准...
Vuex的Action,相当於component内的methods,里面宣告并使用方法,但不会直接改...
上一篇我们讲到建立一个UItable View的一些基本方法,接下来我们可以建立一些资料在上面 va...
登入 MySQL mysql -u root -p 建立空资料库 mysql > create...