npm や yarn でインストールした husky が動かない問題の対応方法
はじめに
npm や yarn インストールした typicode/husky のフックが動かない問題の対応方法。
TL;DR
- v5 系で大きなアップデートがされている
- v4 系と v5 系とでインストール時の挙動が異なる
- v4 系: インストール +
package.json
の変更で OKnpm i -D husky@^4
,yarn add -D husky@^4
でインストール- インストール時に
.git/hooks
配下に色々と作られる
- インストール時に
package.json
に"husky"
セクションを追記すれば OK
- v5 系: 追加セットアップが必要(インストールだけでは
.git/hooks
下には何も作られない)npx husky install
oryarn husky install
npx husky add .husky/pre-commit "echo 'pre-commit'"
oryarn husky ...
目次
環境・条件
1 | $ sw_vers |
詳細
参考: What’s new in husky 5 - DEV Community
v5 系へのメジャーアップデートで、セットアップ手順が変わっている。
公式リポジトリ(typicode/husky)にも、以下のように書かれている。
Note: husky 5 is a major version with breaking changes. Upgrading from v4 to v5 requires additional steps, please see the docs.
問題事象
読まなくても OK
以下はダメな例。先に書いておくと 「v5 系がインストールされるのに、v4 系の設定をしている」 ので NG
1 | $ npm i -D husky # もしくは yarn add -D husky |
package.json
に以下を追記。
1 | { |
コミットしてみると husky による pre-commit フックは動作しない。
1 | $ git add package.json && git commit -m "husky test" |
解決方法
v5 系
husky インストール後、husky init
, husky install
, husky add
でセットアップすれば OK。
1 | $ npm i -D husky |
なお .husky
配下にコンフィグなどが追加されており、.husky/pre-commit
はこんな感じ。
1 |
|
ちなみに npx husky
で出てくるヘルプに例が載っている。
1 | $ npx husky |
v4 系
v4 系を使いたい場合は、インストール時にバージョン指定。
1 | $ npm i -D husky@^4 |
あとは package.json
に以下を追記。
1 | { |
まとめ
- v5 系で大きなアップデートがされている
- v4 系と v5 系とでインストール時の挙動が異なる
- v4 系: インストール +
package.json
の変更で OKnpm i -D husky@^4
,yarn add -D husky@^4
でインストール- インストール時に
.git/hooks
配下に色々と作られる
- インストール時に
package.json
に"husky"
セクションを追記すれば OK
- v5 系: 追加セットアップが必要(インストールだけでは
.git/hooks
下には何も作られない)npx husky install
oryarn husky install
npx husky add .husky/pre-commit "echo 'pre-commit'"
oryarn husky ...
その他・メモ
以下を参考にして .git/hooks
を削除して再インストールしたりとか、yarn
のバージョン確認してみたりしたけど、結局はメジャーアップデートによる影響というもの。
ついつい日本語でググってしまうけど、これまでの環境との違い(今回は husky のバージョン)や、一次情報を真っ先に確認する癖をつけたい。
参考文献
関連記事
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)
- axios で unable to verify the first certificate の対応方法
- Git で package-lock.json がコンフリクトした時の解決方法
- Vue.js で FontAwesome を使う方法
- Node.js でミリ秒より高解像度の時刻情報取得や計測を行う方法
- Node.js で firebase-admin を使ってサーバからプッシュ通知
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア