🐥
huskyを使っているプロジェクトでApp Engineへのデプロイが失敗するときの対処法
現象
コミット時に 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
production
? 0 : 1)
process.exit(process.env.NODE_ENV === NODE_ENV 環境変数が production
のとき、正常終了し、そうでない場合は、終了コード1を出して失敗します。
||
前のコマンドが失敗したときに、後ろのコマンドを実行します。
まとめ
App Engineは強い。
Discussion