20 - Husky - Git Hooks 工具

为了维护专案程序码的品质,我们需要对提交的代码做各式的检查(例如: Lint 、 Format 、 Unit Testing 等),而检查的时机点就位於各个 Git hooks 上。

Git hooks 让开发者可以在对应的 hook 注册脚本, Git 触发这些 hooks 时就会执行这些脚本去做对应的处理。

Node.js 的 Git Hooks 工具 - Husky

Husky 是个 npm 套件,它让使用者可以用直觉的操作方式注册各式 hooks 事件,将各式的处理配置於各个 hooks 中。

在安装完成後於 .husky 目录下设定对应的 Git hook 名称档案(例如: pre-commitcommit-msg ),在 Git hooks 触发时就会执行对应的指令。

安装 Husky

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

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 相同,所以当 .gitpackage.json 的目录不同时,需要先使用 cd 指令移动当前位置再执行 husky install

以下面的例子来说:

project
|- .git
|- /front
  |- .husky
  |- package.json

project/front/package.jsonprepare script 应该要如下:

{
  "scripts": {
    "prepare": "cd .. && husky install front/.husky"
  }
}

指令要先向上移一层,并且由於配置目录 .huskyproject/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 中。

本文重点整理

  • 为了维护程序码品质,我们需要使用工具检查程序码的方方面面,例如:执行测试、格式化等。但是人工执行既花费时间也不能保证各个程序都有走完,因此使用 Git hooks 配置相关的处理是最好的方式,既可以节省人力,也可以确保进入代码库的都是已经通过相关检查的程序码。
  • Husky 套件帮助开发者可以直觉地配置 Git hooks 相关的脚本,让整个配置过程更加地简单,藉此增加专案配置相关检查的意愿,提高程序码的品质。
  • 使用官方提供的初始化指令安装 Husky 。
  • 使用 husky add 对特定的 Git Hook 加入执行脚本。
  • 如果有客制脚本放置目录的需求,在 prepare 时要指定目录,并在脚本执行时移动至此目录。

参考资料


<<:  [Day 21] Edge Impulse + BLE Sense实现唤醒词辨识(中)

>>:  [22] [Discord 机器人] 02.掷骰机器人

Why is computer so slow and how to fix

Reasons for a slow Computer System**** Too many st...

DAY23神经网路(续一)

昨天介绍完单层感知机模型演算法,今天要来研究单层感知机模型程序: 首先先把x资料做标准化 #个别标准...

30.Action

Vuex的Action,相当於component内的methods,里面宣告并使用方法,但不会直接改...

Day 18 UItableView的练习 (2/3)

上一篇我们讲到建立一个UItable View的一些基本方法,接下来我们可以建立一些资料在上面 va...

MySQL 汇入 .sql 档案

登入 MySQL mysql -u root -p 建立空资料库 mysql > create...