如何在Ubuntu 16.04服务器将Node.js版本升级至v5.12.0?
你遇到的核心问题是系统自带的Node.js(v4.2.6)与NVM管理的Node.js版本相互独立且冲突,再加上sudo执行命令时会跳过NVM的环境配置,导致之前的升级操作没能覆盖系统旧版本,最终因为v4.x不支持非严格模式下的ES6 class语法引发报错。下面是针对性的解决步骤:
一、理清版本冲突的根源
你通过NVM安装的Node.js是用户级版本(存储在当前用户的~/.nvm目录下),而系统自带的nodejs是通过apt包管理器安装的全局版本,二者互不干扰。当使用sudo执行命令时,终端会切换到root环境,此时NVM的环境变量不会被加载,所以依然调用的是系统旧版本的Node.js。
二、用NVM安装并切换到v5.12.0
既然已经使用NVM(专门的Node多版本管理工具),就无需再借助n工具,直接通过NVM管理版本更可靠:
彻底卸载系统自带的nodejs(避免后续混淆)
执行以下命令移除系统版本及残留文件:sudo apt remove --purge nodejs sudo apt autoremove sudo apt clean用NVM安装v5.12.0
直接运行安装命令:nvm install 5.12.0设置v5.12.0为默认版本
这样每次登录终端都会自动切换到该版本:nvm alias default 5.12.0验证版本是否生效
重启终端后执行以下命令,所有输出都应返回v5.12.0:node --version nodejs --version npm --version如果
nodejs命令仍显示旧版本,可手动创建软链(确保已卸载系统nodejs后执行):ln -s $(which node) /usr/bin/nodejs
三、解决sudo运行npm的权限问题
如果必须用sudo npm start启动项目,需注意sudo默认不会继承当前用户的NVM环境,可通过以下命令传递环境变量:
sudo -E env PATH=$PATH npm start
不过更推荐避免用sudo运行npm,因为这可能导致项目文件权限混乱。可以先修改项目目录的权限:
sudo chown -R $USER:$USER /opt/你的MEAN项目目录
之后直接用npm start启动即可。
四、关于原报错的补充说明
你遇到的SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode,确实是因为Node.js v4.x对ES6特性的支持有限,升级到v5.12.0后这个问题会自然解决——v5.x已原生支持非严格模式下的class、let等语法。
内容的提问来源于stack exchange,提问作者SoftTimur

