Posted at

herokuにデプロイしたらある日突然sh: 1: cross-env: not foundエラーが出て調べて出てくる対処方ではどうにもならなかった時の対処法


今回の敵

sh: 1: cross-env: not found 

に苦しめられて結構調べても解決策がでてこなかった

スライムかと思ったらハーゴンでした


経緯

おとといまで元気に動いてたHerokuちゃんが今日から突然デプロイ時のビルドに失敗するようになった

何もしてないのに壊れた(マジで)

直すのに結構時間がかかったので、同じような事があった時に備えて調査のやり方と動くようにする方法を記載しておく


結論

package.jsonにこいつを追加すれば動く

    "engines": {

"node": "10.15.0"
}

version 10.15.1がリリースされたのが1/29の朝方なので、もしかしたらそれ関連で何かあるのかもしれない。

(1/30 19:30時点では情報見つけられず)


調査方法

後に記載するがGoogle先生が教えてくれる方法では同じエラーが発生し続けた

なので調査のために試した事

ビルドが成功していた最新までコミットを戻し、空コミットしてプッシュ

→ビルド失敗(コードの問題の可能性低)

ローカルでnpm run production実行

→問題なくビルドされる(ビルドのscriptsの問題の可能性低)

ファイルの権限設定をHeroku上と同じにしてローカルでnpm run production実行

→問題なくビルドされる(権限の問題の可能性低)

heroku run npm run production実行

→問題なくビルドされる(この結果はかなり混乱したが、どうやらビルド処理の前後に問題がありそう)

以上の結果から、こちら側で変更したものには問題がなさそうなので

Herokuのactivityタブから見る事ができるビルドログを正常終了時と異常終了時でdiffをとる

正常終了時

       Resolving node version 10.x...

Downloading and installing node 10.15.0...
Using default npm version: 6.4.1

-----> Restoring cache
- node_modules

異常終了時

       Resolving node version 10.x...

Downloading and installing node 10.15.1...
Using default npm version: 6.4.1

-----> Restoring cache
Cached directories were not restored due to a change in version of node, npm, yarn or stack
Module installation may take longer for this build

どうやらnodeのバージョンが違う事が問題を引き起こしているみたいだ

nodeのリリースノートを見ると、1/29の7時に10.15.1がリリースされている

という事で、以前のバージョンに戻せば動くのではとあたりをつけて調べ、ビルド時のnodeのバージョンを指定する方法が結論に書いてある方法となる


備考

ローカルのnodeのバージョンを10.15.1に上げてもビルドに成功したのでHerokuのheroku-buildpack-nodejsの問題のような気もする


余談

一応Google先生が教えてくれる対処法も記載しておく


その1

package.jsonに書くこれを

"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"

こうする

"production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",


その2

node_modulesをrm -rfで消してからnpm install


その3

npm install --save-dev cross-env

してから

npm install