pm2启动server.js时报块级声明非严格模式不支持语法错误
问题根因
你遇到的报错本质是PM2运行时调用了系统自带的低版本Node.js(v4.2.6),该版本对ES6块级声明语法支持不完善,才会抛出严格模式相关的语法错误,具体有两个触发原因:
- 系统同时存在两个Node.js版本:nvm安装的v15.8.0仅对当前用户生效,而初始使用
sudo npm i -g pm2安装时,sudo会重置环境变量,默认调用的是系统全局的v4.2.6版本Node来安装PM2,导致PM2的依赖包是适配低版本Node安装的,运行时自然调用低版本引擎 - 环境变量优先级问题:初始状态下系统Node的路径在PATH中优先级高于nvm的Node路径,即使后续非sudo安装PM2,也可能出现调用错版本的情况
规范解决步骤
你之前临时修改PATH的方案是有效的,但稳定性不足:如果重启shell、切换用户或者升级nvm Node版本后,修改的PATH会失效,问题会复现。推荐使用nvm官方推荐的标准方案操作:
- 先彻底清理之前安装的PM2残留
# 切到root权限删除全局安装的旧PM2 sudo rm -rf /usr/local/lib/node_modules/pm2 sudo rm -rf /usr/local/bin/pm2 # 切回普通用户删除用户目录下的PM2缓存残留 rm -rf ~/.pm2
- 永久固定nvm Node版本的环境变量优先级
把nvm的加载逻辑写到用户的shell配置文件里,重启也不会失效:
# 如果你用的是bash,执行下面的命令 echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"' >> ~/.bashrc source ~/.bashrc # 如果你用的是zsh,把上面的.bashrc全部替换成.zshrc即可
执行完后验证Node版本,确认返回正常:
node -v # 正常应该返回v15.8.0 which node # 正常应该返回/home/ubuntu/.nvm/versions/node/v15.8.0/bin/node
- 重新安装PM2
不要加sudo,直接用当前用户的npm全局安装:
npm install -g pm2 # 安装完成后验证版本 pm2 -v
- 后续如果需要用sudo执行pm2命令,可以直接用nvm Node的绝对路径调用,避免sudo重置PATH找错Node:
sudo /home/ubuntu/.nvm/versions/node/v15.8.0/bin/pm2 start server.js
内容的提问来源于stack exchange,提问作者AG_HIHI
相关产品推荐
相关产品推荐

