NodeJS

【Node.js】herokuデプロイ時に[sh:1: コマンド名 : not found]エラーになる場合の対応

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に使用するライブラリを記載しますが、漏れがあると該当エラーが発生します。

下記例ではscriptsnpm-run-allコマンドを使用していますが、dependenciesnpm-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"
  }

上記例ではdependenciesdevDependencies双方にnpm-run-allがありますが、”npm-run-all: not found”となります。

対応

devDependenciesブロックを丸ごと削除してください。

たとえdependenciesと同じ定義としても動作しなくなるので、ブロックごと消してください。

まとめ

今回の記事では筆者がherokuデプロイ時にハマった点について、簡単で恐縮ですが解説しました。ご参考になれば幸いです。

その他皆様が躓いたことなどありましたらご共有いただければと思います。

 

COMMENT

メールアドレスが公開されることはありません。

CAPTCHA