Node.jsで作成したWebアプリケーションをherokuにデプロイする際に以下のようなエラーになることがあります。
“sh:1: npm-run-all : not found” とか
“sh:1: rimraf : not found” とか。
本記事では上記のようなコマンドnot found系のエラーが発生した場合の対処について解説します。
- Node.js Webアプリをherokuにデプロイした際のコマンドnotfoundエラー原因
- 対応方法
[sh:1: コマンド名 : not found]エラーについて
herokuデプロイ時、以下のようなエラーが発生します。
指定したコマンドをherokuビルド時に読み込めてないようでした。
app[web.1]: sh: 1: npm-run-all: not found
herokuのログはherokuアプリケーションページのMore→View logsで確認できます。(heroku CLIコマンドラインはproxyサーバがある環境でうまく動かないことがあるので、View logsの方が手っ取り早いです。)
原因と対策
原因①:package.jsonのdependenciesに記載していない
package.jsonのdependenciesに使用するライブラリを記載しますが、漏れがあると該当エラーが発生します。
下記例ではscriptsでnpm-run-allコマンドを使用していますが、dependenciesにnpm-run-allの記載がありません。
<package.json>
"scripts": {
"build": "npm-run-all build:*",
"build:examples": "npm-run-all build:examples:*",
"start": "npm run build && node server"
},
"dependencies": {
"dotenv": "^4.0.0",
"express": "^4.15.2",
"prismjs": "^1.6.0",
"stackblur-canvas": "^1.4.0",
"browserify": "^14.3.0",
"copyfiles": "^1.2.0",
"rimraf": "^2.6.1"
}
<発生するエラー>
app[web.1]: sh: 1: npm-run-all: not found
対応
dependenciesに“npm-run-all”: “^4.1.5“,など、使用するライブラリとバージョンを明記します。
npm install npm-run-allでインストールを行うと自動でpackage.jsonにも追記されるため、コマンドで処理する方が良いでしょう。
<package.json ※修正後>
"scripts": {
"build": "npm-run-all build:*",
"build:examples": "npm-run-all build:examples:*",
"start": "npm run build && node server"
},
"dependencies": {
"dotenv": "^4.0.0",
"express": "^4.15.2",
"prismjs": "^1.6.0",
"npm-run-all": "^4.1.5", ← 足りないものを追加
"stackblur-canvas": "^1.4.0",
"browserify": "^14.3.0",
"copyfiles": "^1.2.0",
"rimraf": "^2.6.1"
}
原因②:package.jsonにdevDependenciesの記載がある
devDependenciesはデバッグ時に追加で読み込むライブラリの定義ですが、これがあるとherokuではまともに動作しないようです。
<package.json>
"dependencies": {
"dotenv": "^4.0.0",
"express": "^4.15.2",
"npm-run-all": "^4.1.5",
"prismjs": "^1.6.0",
"stackblur-canvas": "^1.4.0",
"twilio": "^3.19.1",
"twilio-video": "^2.18.0",
"browserify": "^14.3.0",
"copyfiles": "^1.2.0",
"rimraf": "^2.6.1"
},
"devDependencies": { ← このブロックがあると動作しない
"npm-run-all": "^4.1.5",
"browserify": "^14.3.0",
"copyfiles": "^1.2.0",
"rimraf": "^2.6.1"
}
上記例ではdependenciesとdevDependencies双方にnpm-run-allがありますが、”npm-run-all: not found”となります。
対応
devDependenciesブロックを丸ごと削除してください。
たとえdependenciesと同じ定義としても動作しなくなるので、ブロックごと消してください。
まとめ
今回の記事では筆者がherokuデプロイ時にハマった点について、簡単で恐縮ですが解説しました。ご参考になれば幸いです。
その他皆様が躓いたことなどありましたらご共有いただければと思います。