🐕
github clientからコミットを試みた時にhuskyでエラーが出た
概要
macで複数のnodeプロジェクトにおいて、異なるnodeバージョンを使っている時に、github desktopやvs codeのsource control等のgithub clientからコミットを試みた時にhuskyでエラーが出た。
huskyではpre-commit hookでlinterを実行し、エラーがある場合はコミットを防ぐようにしている。
nodeのバージョンはnvmで管理していて、defaultバージョンとプロジェクトのバージョンが異なる場合にエラーが出る。
結論
lintを実行する時にプロジェクトで作成された環境のnodeのバージョン(デフォルトではない)と、git clientで使っているnodeのバージョン(デフォルト)で異なっているためにエラーになっている。
エラーとしないために、huskyの環境設定スクリプトでプロジェクトのnodeバージョン設定を使うようにすれば良い。
具体的には以下を実施すれば良い
- プロジェクトごとに.nvmrcを作成し、nodeバージョンを指定する
- huskyのinit.shでnvm useを実行し、git clientで使うnodeをプロジェクトにあわせる
github desktop でコミットを実行した時に発生するhuskyエラー
こんなエラーが出ました
/Users/user_name/.config/husky/init.sh: line 11: syntax error near unexpected token `fi'
/Users/user_name/.config/husky/init.sh: line 11: `fi'
yarn run v1.22.19
error project-name@1.0.0: The engine "node" is incompatible with this module. Expected version "20.x". Got "18.18.2"
error Commands cannot run with an incompatible environment.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
husky - pre-commit script failed (code 1)
huskyの環境設定
参考情報などで .huskyrc に設定を書くという情報があるが、.huskyrcはdeprecateされていて、.config/husky/init.shに書いた方が良い。
init.sh
# nvm.shのパスを追加
export NVM_DIR="$HOME/.nvm"
# nvm.shの存在を確認し、あれば実行する
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# huskyを実行する場所に.nvmrcがあればそのnodeに切り替える
if [[ -f ".nvmrc" ]]; then
nvm use
fi
これでvs codeのsource controlとgithub desktopからコミットできた!
Discussion