環境
ホスティングサービス: さくらのVPS
CentOS Linux release: 7.6.1810 (Core)
node: v6.17.1 -> 14.0.0
express: 4.16.1
nginx: 1.20.1
pm2: 5.1.2
nodemon: 2.0.13
前回の記事より、ひとまずexpressの開発環境を整えるにあたって、BrowserSyncを導入しようと考えた。
それと同時に、nodemonを使ってexpressを起動しようとした際、エラーが出て起動しなかった。
nodemonのインストールは以下の記事の下の方に書いていた。
プロジェクトディレクトリに入って、下記を実行
node ./node_modules/.bin/nodemon ./bin/www
するとこんなエラーが
/home/user/sandbox/sample_app/node_modules/chokidar/index.js:162
async remove(item) {
^^^^^^
SyntaxError: Unexpected identifier
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:549:28)
at Object.Module._extensions..js (module.js:586:10)
at Module.load (module.js:494:32)
at tryModuleLoad (module.js:453:12)
at Function.Module._load (module.js:445:3)
at Module.require (module.js:504:17)
at require (internal/module.js:20:19)
at Object. (/home/user/sandbox/sample_app/node_modules/nodemon/lib/monitor/watch.js:6:16)
async remove errorを手がかりに探すと、下記の記事がヒットした。
javascript – How to fix Nodemon “async remove {}” syntax error? – Stack Overflow
記事の内容を見ると、単純にnodeのバージョンが古すぎるらしいことがわかった。
なるほど、と自分のノードのバージョンを見なおしてみたらv6.17.1とのこと。これが古いのかどうかもわからない。
ひとまずnodeの新しいバージョンを試してみる必要がある、ということでnodenvをインストールする。
下記の記事を参考にさせていただいた。
nodenv の実行ファイル群をホームディレクトリにコピーする
git clone git://github.com/nodenv/nodenv.git ~/.nodenv
node環境構築用プラグインのnode-buildをnodenv環境のプラグインフォルダにコピーする
git clone git://github.com/nodenv/node-build.git ~/.nodenv/plugins/node-build
nodenvへパスを通す設定を.bash_profileへ追加
(対象ファイルや書き方は環境に応じて要変更)
echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bash_profile
nodenvの利用開始コマンドを.bash_profileへ追加
echo 'eval "$(nodenv init -)"' >> ~/.bash_profile
追加内容を適用する
(公式はシェルの再起動としている)
source ~/.bash_profile
その後、nodeの目的バージョンをインストール。ひとまず何がいいのかわからないので14.0.0をインストールしてみた。
nodenv14のインストール
nodenv install 14.0.0
現在のディレクトリにnode-v14.0.0を適用
nodenv local 14.0.0
ここで、ノードのバージョンを確認してみるとノードのバージョンが切り替わっていなかった。
node -v
# 6.17.1
おかしいなと首をかしげたが、tmuxの立ち上げなおすとちゃんと認識されていた。
やはり公式の言う通り、sourceだけではバージョンの切り替えはうまくいかなかった模様?
その後、改めて下記を実行すると
node ./node_modules/.bin/nodemon ./bin/www
nodemonによってexpressを起動することができた。
結局、前回の記事でpm2を動かせなかったのも、nodeのバージョンが古すぎたせいだったこともわかった。