🍇
[husky 6.x] Custom directoryでpre-commitする
huskyのバージョンアップに伴って、pre-commit時等に特定の処理を走らせる処理が変わりました。ドキュメント等は手厚いものの、.git
とpackage.json
が同じ階層にない場合はどの手順で設定すれば良いのか迷ったため、記事として残しておきます。
また、下記の記事が参考になったため、こちらも合わせて読むとわかりやすいです。
husky の pre-commit が(また)動かない
手元の環境
node: v14.15.4
yarn: v1.22.10
huskyのinstall
何はともあれhuskyのinstallです。すでに古いバージョンをインストールしている場合、一度uninstallしてから始めた方が良いかもしれません。
yarn remove husky && git config --unset core.hooksPath
install
yarn add husky -D
Git hooksの設定
続いて.git
の定義がある階層まで戻り、Git hooksを設定します
cd ..
npx husky install
pre-commitの設定
最後にpre-commitの設定を行います。まずscripts
に下記を追加します。元々利用していたlint-staged
を使いまわしたい場合はscripts
に定義してください。
package
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
+ "prepare": "cd .. && husky install front/.husky",
+ "lint-staged": "lint-staged"
},
"lint-staged": {
"*.{js,ts,jsx,tsx}": [
"npx eslint . --fix",
"npx prettier --write ."
]
},
定義したprepare
を実行し、さらにpre-commitのシェルスクリプトを作成します。
yarn prepare
npx husky add .husky/pre-commit "yarn lint-staged"
package.json
と同じ階層に.husky
が下記のように作成されます。
.
├── .husky
│ ├── .gitignore
│ ├── _
│ │ └── husky.sh
│ └── pre-commit
└── package.json
最後に、git hooksが実行される際に.git
から実行できるようpackage.json
まで移動します。
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
+ cd front
yarn lint-staged
以上でCustom directoryでpre-commitが動くようになりました!
ご参考になれば幸いです!
Discussion