検証環境にてnpm scriptが通らずハマったのでメモ

# したかったこと
リリース済みで本番稼働しているprojectの検証環境にフロント環境を整えたかった。

# やったこと

- 検証環境に入りgit clone
- ローカルと同じように`npm run dev`

# 起きたこと

> sh: next: コマンドが見つかりません

とりあえずエラー文を読んでみました。
(リポジトリー名をhogeに変えてます)

```
$ npm run dev
sh: next: コマンドが見つかりません
npm ERR! Linux 3.10.0-862.11.6.el7.x86_64
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "run" "dev"
npm ERR! node v6.16.0
npm ERR! npm  v3.10.10
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! hoge@1.0.0 dev: `next -p 8080`
npm ERR! spawn ENOENT
npm ERR! 
npm ERR! Failed at the hoge@1.0.0 dev script 'next -p 8080'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the hoge package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     next -p 8080
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs hoge
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls hoge
npm ERR! There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
npm ERR! Please include the following file with any support request:
npm ERR!     /var/www/apps/hoge/npm-debug.log
```

`Local package.json exists, but node_modules missing, did you mean to install?`
package.jsonはあるけど、node_modulesがない、インストールしないのか？みたいなことを言われてるのでnode_modulesを用意します。
(node_modulesはignoreしてるからそりゃそうですw)

# node_moduleの用意
`npm install`

念のため`node -v`でversion確認しときます

```
$ node -v
v6.16.0
```
入っていることが確認できたので、再度`npm run dev`
(一番最初に、`npm run dev`を実行したときは`npm install`をする前なので、動かなくて当たり前でしたw)

さっきのエラーは消えましたが

```
$ npm run dev
npm ERR! Linux 3.10.0-862.11.6.el7.x86_64
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "run" "dev"
npm ERR! node v6.16.0
npm ERR! npm  v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! hoge@1.0.0 dev: `next -p 8080`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the hoge@1.0.0 dev script 'next -p 8080'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the hoge package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     next -p 8080
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs hoge
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls hoge
npm ERR! There is likely additional logging output above.
npm ERR! Please include the following file with any support request:
npm ERR!     /var/www/apps/hoge/npm-debug.log
```
`Failed at the hoge@1.0.0 dev script 'next -p 8080'.`
scriptが失敗してると言われます

# ローカル環境では動くが、テストサーバーやステージングサーバーでは動かない

調べていたら同じような状況の時にすべきことが載っている素晴らしいところにたどり着いたので
一つ一つ試してみました。

## ログのエラー確認

先ほどのエラーに
`Please include the following file with any support request:/var/www/apps/hoge/npm-debug.log`とあったので

`$ vi npm-debug.log`で確認します
(error以降のみ表示してます)

[追記] 
記事公開後にlogの確認は、一般的にはcat or less or tailのほうが良いと思いますと指摘をいただきました！
logの確認をエディタなどで開いてしまうと、改変や削除の危険があり危険だということみたいです。
詳しくはこちらを[運用や調査でログを確認するときによく使うコマンド集](https://qiita.com/ug23/items/308182bf4e60bc81f04e)(2020.02.27)


```
17 error Linux 3.10.0-862.11.6.el7.x86_64
18 error argv "/usr/bin/node" "/usr/bin/npm" "run" "dev"
19 error node v6.16.0
20 error npm  v3.10.10
21 error code ELIFECYCLE
22 error hoge@1.0.0 dev: `next -p 8080`
22 error Exit status 1
23 error Failed at the hoge@1.0.0 dev script 'next -p 8080'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the hoge package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error     next -p 8080
23 error You can get information on how to open an issue for this project with:
23 error     npm bugs hoge
23 error Or if that isn't available, you can get their info via:
23 error     npm owner ls hoge
23 error There is likely additional logging output above.
```

先ほどのエラー文とほぼ同じですね。

## 追加したパッケージがpackage.jsonに記載されているか

ローカルと検証環境それぞれで
`$ vi package.json`で出力しみましたが特に問題なかったです。

## 本番で必要なパッケージがdevDependenciesに書かれていないか
こちらも確認しましたが問題なかったです。

## nodeとnpmのバージョンが同じかどうか

とりあえずversion確認

```
$ npm -v
3.10.10
$ node -v
v6.16.0
```
怪しいのと、かなり古いのもあったので、とりあえずローカルに合わせるために
`$ nodebrew use v10.15.3`
(nodeのversionに合わせてnpmのversionも上がるので強制的に同じversionになります)

[追記]
記事公開後、ローカルの環境に合わせるのは悪で、検証環境にローカルの環境を合わせる方がいいと指摘をいただきました。
もし、検証環境のversionを変更するなら「検証環境version upタスク」を作り慎重にやる方が良さそうです！
そして既にリリース済みの場合は、本番環境を元に環境構築を行うのが大前提のようです。(2020.02.27)

> -bash: nodebrew: コマンドが見つかりません

nodebrewが入ってないということなので、入れます。

### nodebrewのinstall
nodebrewの公式の通りにやってみます。
[詳しくはこちら](https://github.com/hokaccha/nodebrew#install)
(.bash_profileの部分は、SHELLの設定なので.bashrcや.zshrcに変えたりしてください)

```
$ curl -L git.io/nodebrew | perl - setup
$ vi .bash_profile
$ source ~/.bash_profile
```

再度実行します

```
$ nodebrew use v10.15.3
v10.15.3
```

nodeのversionをあげられました！
npmのversionも確認します。

```
$ npm -v 
6.4.1
```
無事npmのversionも上がりました！！
(今回は、npm scriptを通しただけなので実際にアクセスはまだできていません)

# npm script実行

無事npm script通りました！！！！

# まとめ
- node_modulesを用意する
- nodeとnpmのversionを揃える
- nodebrewを入れる

以上です！

SpecialThanks: [tweeeety](https://twitter.com/_tweeeety_)