Ubuntu 16.04.4 LTS下npm-cli.js块级作用域声明语法错误求助
解决Ubuntu 16.04.4 LTS中npm运行的SyntaxError问题
我来帮你搞定这个问题——你遇到的语法错误本质是Node.js版本太老,不兼容npm新版本里用到的ES6块级作用域语法(比如let声明)。Ubuntu 16.04默认预装的Node.js是v4.x系列,而现在的npm新版本至少需要Node.js v6.14.4或更高版本才能正常运行。
下面是具体的解决步骤,推荐用最稳妥的方式来升级:
1. 先确认当前Node.js版本
打开终端,运行这条命令看看你当前的Node版本:
node -v
如果输出是v4.x或者更低,那百分百是版本不兼容导致的问题。
2. 用nvm升级Node.js(推荐)
nvm(Node版本管理器)可以帮你在系统里同时管理多个Node版本,不会干扰系统自带的Node工具,非常灵活:
安装nvm
在终端执行以下命令:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
安装完成后,关闭当前终端再重新打开,或者执行下面的命令让nvm立即生效:
source ~/.bashrc
安装兼容的Node.js版本
比如安装长期支持的v14.x版本(它和npm v6.x完美兼容,足够应对绝大多数开发场景):
nvm install 14
安装好后,把这个版本设为默认:
nvm alias default 14
验证升级成功
再次运行这两条命令:
node -v npm -v
如果分别输出v14.x.x和v6.x.x左右的版本,就说明升级成功了,再运行你的npm命令应该就不会再出现那个语法错误了。
替代方案:直接升级系统级Node.js(不推荐)
如果你不想用nvm,也可以通过官方PPA来替换系统自带的Node.js:
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt-get install -y nodejs
不过这种方式会覆盖系统原生的Node.js,可能影响依赖它的系统工具,所以优先推荐用nvm的方式。
补充下错误原因:报错的那行代码
let notifier = require('update-notifier')({pkg})用了ES6的let声明,而老版本的Node.js在非严格模式下不支持块级作用域声明,升级Node.js后就能正常解析这个语法了。
内容的提问来源于stack exchange,提问作者cs guy




