[VSCode] husky で npm: command not found になる問題の解決方法


はじめに

こんにちは。kimizuy です。

今回はプロジェクトで husky を使っている方に向けた備忘録です。

コミット前の検証に何かしらのコマンドを走らせようとしたときに npm: command not found となる場合があります。

このエラーは VSCode に加えて Node.js のバージョンマネージャーである nvmvolta を組み合わせるとよく起こるエラーのようです。

対処法としては huskynpmyarn のパスを見失うので、コマンドの実行前にパスをロードする必要があります。

環境

  • husky v8.0.1
  • Next.js v12
  • Mac Big Sur

tldr

nvmvolta でそれぞれご紹介します。Hook ファイル内で、コマンド(この場合は npm run test)の実行前にパスをロードするスクリプトを記述します。

yarn を使っている人は npm run の部分を読み替えてください。

nvm

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

npm run test

volta

#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

export VOLTA_HOME="$HOME/.volta"
export PATH="$VOLTA_HOME/bin:$PATH"

npm run test

以下のイシューにも書いてありますが、husky の v4 から v5 へのアップグレードや VSCode のアップグレードでもパスが通ったり通らなかったりで動きが変わるようです。
かなり環境に依る部分なので上記のコード例は一例として参考にしてください。

https://github.com/typicode/husky/issues/912#issue-840781354

参考

おわりに

この記事で VSCode を再起動する人が減ると幸いです。

以上、お読みいただきありがとうございました。

この機会に、オンラインで気軽に面談してみませんか?

現在弊社では一緒にお仕事をしてくださるエンジニアさんやデザイナーさんを積極募集しています。まずはカジュアルな面談で、お互いに大事にしていることをお話できたらうれしいです。詳しい応募要項は以下からチェックしてください。

パートナー契約へのお問い合わせもお仕事へのお問い合わせも、どちらもいつでも大歓迎です。まずはオンラインでのリモート面談からはじめましょう。ぜひお気軽にお問い合わせください!

お問い合わせしてみる!

投稿者 Gaji-Labo Staff

Gaji-Laboの社内デジタル環境でいろいろなお手伝いをしているがじ専務&じら常務。みんなのシリーズ記事をまとめたり、卒業したスタッフの過去記事を記録したり、Twitterをやったりしています。