PM2 没有安装最新版本的 nodejs

问题描述 投票:0回答:2

之前,我的 ec2 服务器上安装了节点版本

v0.10.46
。对于最近的项目,我决定尝试使用 pm2 并使用安装 pm2
npm install pm2 -g
.

但是,

pm2 start index.js
出错了,因为该项目使用了一些带有箭头函数和 let 关键字的 ES6 语法。

因此,我使用 nvm 将节点版本更新到最新的 v6.9.1,这也是我们在本地(windows)上开发时使用的相同版本。

然而pm2启动index.js又报错了同样的错误:

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

此外,

v0.10.46
不是使用 nvm 安装的。

编辑: 这是正在运行的 pm2 守护进程,使用

ps -ef | grep pm2
:

注意 ec2-user 是登录用户,我也尝试过使用 root 用户。我也以 root 用户身份安装了运行节点 v6.9.1 和 pm2 的 nvm,但没有成功。我得到了同样的错误。

javascript node.js linux pm2 nvm
2个回答
7
投票

NVM 允许您一次运行多个版本的节点(在多个 shell 之间)。这意味着当您运行

nvm use
时,您正在运行的 shell 的上下文中使用该版本的节点。

鉴于 PM2 作为守护进程运行,我相信它会启动自己的进程,这就是为什么它不使用当前 nvm 选择的版本。

这个 GitHub 问题显示了解释器标志的用法,这可能对您的特定问题有所帮助https://github.com/Unitech/pm2/issues/1034


如果这里的实际问题是 PM2 进程需要运行特定的 NodeJS 版本,而不是应用程序 PM2 正在生成,则在运行

nvm use
后重新启动 PM2 dameon 本身将使其以当前选择的 Node 版本启动通过
nvm
.


0
投票

如果你想让pm2使用特定版本的节点,在你的

ecosystem.config.js
文件中使用以下两个指令:

{
    ...
    exec_mode: "fork",
    interpreter: "[email protected]", // or any installed version
    ...
}

必须使用

exec_mode: "fork"
,否则您的节点应用程序将被创建为您的主 pm2 进程的子进程,该进程使用系统当前使用的节点版本。

© www.soinside.com 2019 - 2024. All rights reserved.