husky v4 -> v7に移行する方法


huskyをv7に移行すると何が変わるのか?

  • typicode公式ブログに書いてある
  • ものすごく要約すると、「.git/hookspackage.json.huskyrc.jsなどに設定が散らばっていて不便だったけど、今後は.husky配下にまとまります」ということ

v5とv6は使わないの?

公式ドキュメント

「Migrate from v4 to v7」の章がわざわざ用意されている。優しい。
https://typicode.github.io/husky/#/

この記事の想定読者

他の記事の書いてある通りに、公式ツールを使っても[yes/no]で答える質問が表示されなくて困った人(自分)
ちゃんとツールが色々質問してくれた人は、この手順踏まなくてもよいと思います

移行手順

1. husky v7をインストールする

typicode公式のmigrationツールを使って、環境に応じて適切なコマンドを叩く。
自分はyarn2だったので下記。

yarn add husky@latest --dev \
  && npx husky-init \
  && npm exec -- github:typicode/husky-4-to-7 --remove-v4-config

2. 以下の差分が出る事を確認する

・リポジトリ直下に`.husky`ディレクトリが作成される
・package.jsonのhuskyのバージョンが7.0.0になる
・package.jsonに "prepare": "husky install"が追加される

3. v4のconfigをv7に移行する

これまでpackage.jsonにあった設定を、v7のために.husky配下に移行する。
HUSKY_GIT_PARAMSは廃止されたので、$1などに変更すること。
commitlintを使っている人は、-E HUSKY_GIT_PARAMSだったのが、--edit $1に変わってたので追従すること(v5に変わったときのコミット履歴)

yarn husky add .husky/pre-commit 'yarn lint-staged' & \
yarn husky add .husky/pre-commit 'yarn test --onlyChanged' & \
yarn husky add .husky/commit-msg 'yarn commitlint --edit $1'

4. v7のデフォルト設定を削除する

サンブルとして.husky/pre-commitnpm testが最初から入っているけど、邪魔なので削除する。

5. v4の設定を削除する

package.json等からhuskyの設定を全部削除する。
実はv7でも旧来の設定方法でいけるんだけど、このままだとちゃんと移行できたか分からないので削除する。

おしまい

公式のmigrationツールの冒頭にも書いてあるけど、ツールは実行しても部分的にしか変わらない。
設定まで移行するのをお忘れなく。