husky v5
husky が v5 にメジャーバージョンアップしたので、linjar の husky をアップデートした。
マイグレーション用のツールとして husky-4-to-5 が用意されている。"Requires npm 7" とあるが、npm 6 以前でも npx で特に何の問題もなく実行できた。
$ npx github:typicode/husky-4-to-5 --package-manager npm
実行すると husky v5 と pinst のインストールと、package.json の scripts セクション と husky v5 用のスクリプトファイルが自動構成された。設定ファイルは手直しが必要だった。
linjar の package.json には prepublishonly スクリプトが既に設定されていて、自動構成されなかったので手直しする必要があった。また、これまでの pre-commit フックは npm scripts のコンテキストで実行されていたが、husky v5 からはただのスクリプトになっている。
pinst は postinstall タスクを有効化・無効化するだけのモジュールだった。v5 以降で postinstall スクリプトが必要になったが、ライブラリパッケージの場合は package.json に設定があるとパッケージを使う側でも postinstall スクリプトが動いてしまう。これを回避するためのモジュールと理解した。
新しい husky はライブラリ依存がなくなって、作りもシンプルになっていた。 husky install
コマンドを実行すると、git の core.hookspath
設定が husky 専用に作られたディレクトリに設定されて、専用の環境変数を扱うためのシェルスクリプトがコピーされる。あとはただ git hooks の機能で動くし、その時 husky が間で動くということもない。
% git config --get core.hookspath
.husky
マイグレーションしたコミットはこれ。