#概要
同僚とWebアプリを開発しているときに、環境差分でトラブルに見舞われることはよくあると思うのですが、自分の場合なかなか原因が掴みづらかったので、解決に至った手順を書こうと思います。
#エラー内容
Error: listen EADDRINUSE: address already in use 0.0.0.0:8081
8081ポートがすでに使われているから、nodeでサーバー立ち上げられないよ。というエラー。
ですが、ここの問題に取り組む前にnodeの環境揃えとかんと話にならないということで、nodenvを使ってバージョンを揃えます。
#nodenv導入
MacOSを利用しているので、zshで実行しています。
brew install nodenv
nodenvをインストールしてから以下のコマンドを実行します。
eval "$(nodenv init -)"
次に、カールでこちらを実行します。
$ curl -fsSL https://github.com/nodenv/nodenv-installer/raw/master/bin/nodenv-doctor | bash
これでOKがコンソールに表示されていれば、nodenvの設置完了です。
指定バージョンのNodeをインストール
今回は、Node.jsの14.17.3をインストールしたいと思います。
nodenv install 14.17.3
nodenvに認識させます。
nodenv rehash
ディレクトリ配下でバージョンを適用させる場合
nodenv local 14.17.3
システム全体でバージョンを適用させる場合
nodenv global 14.17.3
nodeのバージョンを確認してみましょう。
node --version
# v14.17.3
プロセスを消しにいく
指定されたポートがすでに利用されているならば、ポートを塞いでいるプロセスを落として仕舞えばいいじゃない。ということでkill processします。
ps aux | grep node
これで表示されるプロセスを全消しして、再度nodeコマンドを実行するも、ポート8081がすでに利用されているというエラーは変わらない。
そんな時はこちらを試してみてください。
ポートを指定してPIDを消す
下記コマンドを実行します。
lsof -i :8081
これは、LiSt Open Fileの頭文字をとったコマンドで、プロセスが開いているファイルを列挙するコマンドになっています。先ほどはnodeを文字列に含むプロセスを探したのですが、今回はportを指定してプロセスを探しにいきます。
これで表示されたPIDをkillしてあげたら、僕の場合は無事実行することができるようになりました。
最後に
nodenvにもっと早く出会ってればよかったです。