LoginSignup
7
2

More than 5 years have passed since last update.

HerokuでNode使っていたらナニモシテナイのに壊れた

Last updated at Posted at 2018-12-02

linebotづくりでHerokuを使っていた。

現象

ある日herokuにpushしたらlinebotが動かなくなった。
heroku logs --tailでログを確認すると以下のエラー。

internal/modules/cjs/loader.js:582
    throw err;
    ^

Error: Cannot find module 'react-dev-utils/crossSpawn'
...

自身のコードを実績あるところまで戻しても同様。ナニモシテナイのに!!

原因

npm install --save-dev "request"でインストールしたrequestモジュールが動かなくなってた。

解決

npm uninstall --save-dev request
npm install --save request

としたら動くようになった。

追いログ

herokuのNode.jsトラブルシューティングを見ると、ヒントになる記事があった。
記事曰く、herokuはpushのたびに以下のコマンドを実施するらしい。

$ rm -rf node_modules
$ npm install --quiet --production
$ npm start

これをローカル環境で実施すると、確かに同じ現象が発生した。
npm install --quiet --production
としていて、これだとdevDependencies(--save-devでインストールしてるほう)のインストールをしてくれないらしい。

なんである日動かなくなったのか

正直謎。

動作で使うモジュールを--save-devしていたのは問題だ。でも最初はそれでも動作していたのに、ある日動かなくなった。
気づいたのは、ローカルのnodeがversion 8でherokuも同じだったが、herokuのmasterが11月1日にnodeのversion 10に上がってた。(この前後で動く・動かないが変わっていた)
>Author: Jeremy Morrell morrell.jeremy@gmail.com
>Date: Thu Nov 1 10:37:28 2018 -0700
>
> Update to the latest LTS version of Node

これが影響している気もしたのだが、npmproductionオプションは前からある。

結局突然動かなくなった原因はわからなかった。
ただログから追うことができたので、追い方は分かった。

分かった。私のせいだ(当然)。
Herokuのサンプルをそのまま改変して使っていたが、HerokuのサンプルではrequestdevDependenciesに入っている。
npm installして開発を開始したが、途中require(request)する修正を入れた。
ローカル環境ではnpm installしてあるのでnode_modules配下にrequestが存在するから何もせず使えていたが、リモート環境はnpm install --quiet --productionでやるからrequestがなくエラーになっていた。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2