以前,我的ec2服务器上安装了节点版本v0.10.46
。对于最近的一个项目,我决定尝试pm2并使用安装pm2
npm install pm2 -g
。
但是,pm2 start index.js
因为项目使用了带箭头函数的一些ES6语法而使用了关键字而出错了。
因此,我使用nvm将节点版本更新到最新的v6.9.1,这也是我们用于在本地(windows)上进行开发的版本。
pm2 show index
暗示nodejs版本仍未更新。我删除了旧的nodejs版本,再次安装了pm2,仍无济于事。
我也试过其他方法,使用:
pm2 start index.js --interpreter=~/.nvm/versions/node/v6.9.1/bin/node
强制pm2使用最新安装的节点版本。每一次尝试都给出了相同版本的nodejs相同的错误。为什么Pm2没有采用最新版本的节点并坚持使用0.10.46?
如果有帮助:
which node
~/.nvm/versions/node/v6.9.1/bin/node
which pm2
~/.nvm/versions/node/v6.9.1/bin/pm2
此外,未使用nvm安装v0.10.46
。
修改
以下是使用ps -ef | grep pm2
运行的pm2守护进程:
请注意,ec2-user是登录用户,我也尝试过root用户。我以root用户身份安装运行节点v6.9.1和pm2的nvm,但没有成功。我得到了同样的错误。
答案 0 :(得分:4)
NVM允许您一次运行多个版本的节点(在多个shell之间)。这意味着当您运行nvm use
时,您正在该运行shell的上下文中使用该版本的节点。
鉴于PM2作为一个守护进程运行,我相信它会启动它自己的进程,这就是为什么它没有使用当前的nvm选择版本。
此GitHub问题显示了解释程序标记的用法,该标记可能对您的特定问题有用https://github.com/Unitech/pm2/issues/1034
如果此处的实际问题是PM2进程需要运行特定的NodeJS版本,而不是应用程序PM2正在生成,则在运行nvm use
之后重新启动PM2 dameon将使其启动当前由nvm
选择的节点版本。