🐥

huskyを使っているプロジェクトでApp Engineへのデプロイが失敗するときの対処法

2021/04/15に公開

現象

コミット時に lint を走らせるために husky を設定しているプロジェクトも多いと思います。
huskyを設定すると npm scripts に"prepare": "husky install"が設定されます。
これにより、npm installなどが走ったあとにhusky installが実行されるため、 全開発メンバーが git-hooks を割と確実に設定することができるようになります。
しかし、この npm scripts のせいで、App Engineへのデプロイ中に以下のエラーがでるようになってしまいました。

husky: not found

この対処法を思いついたので、備忘録として記事に残します。

環境

  • Mac
  • Node 14
  • husky 6.0.0

解決方法

package.json
"prepare": "node --eval 'process.exit(process.env.NODE_ENV === `production` ? 0 : 1)' || husky install",

日本語にすると「NODE_ENV環境変数がproductionではないときだけhusky installを実行する」となります。APP EngineではNODE_ENV=productionが設定されているため、husky installがスキップされます。

解説

node --eval

JavaScriptのコードをインラインで実行することができます。

node --eval 'console.log("foo")'
# -> foo

process.exit(process.env.NODE_ENV === production ? 0 : 1)

NODE_ENV 環境変数が production のとき、正常終了し、そうでない場合は、終了コード1を出して失敗します。

||

前のコマンドが失敗したときに、後ろのコマンドを実行します。

まとめ

App Engineは強い。

Discussion