Ubuntu 18.04运行Node.js Socket.io服务器执行node app.js报错求助
解决Node.js Socket.io启动时的SyntaxError: Unexpected token ...
嘿,这个问题我熟!你遇到的SyntaxError: Unexpected token ...是因为你的Node.js版本太老,不支持ES6的扩展运算符(...),而Socket.io依赖的ws库新版本已经用上了这个语法,旧版本Node根本解析不了。
下面给你两种可行的解决办法,选一个适合你的就行:
方法1:升级Node.js到支持ES6的版本(推荐)
长远来看,升级Node.js是最好的选择,不仅能解决这个问题,还能获得更好的性能和安全性。Ubuntu下可以通过官方源快速升级到LTS版本:
- 添加Node.js官方LTS源:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - - 安装最新的LTS版本Node.js:
sudo apt-get install -y nodejs
安装完后,执行node -v确认版本已经升到v16+或者更高,再运行node app.js应该就能正常启动服务器了。
如果你需要切换多个Node版本,也可以用nvm(Node版本管理器):
sudo apt install nvm nvm install --lts nvm use --lts
方法2:降级ws库到兼容旧Node版本的版本
如果暂时没办法升级Node.js,可以把ws库降级到不使用扩展运算符的旧版本。比如ws@7.x系列是兼容Node.js v6及以上的:
- 直接执行命令安装指定版本:
npm install ws@7.5.9 --save
或者手动修改package.json里的ws版本为^7.5.9,然后运行npm install重新安装依赖。
为啥会出这个错?
从错误栈里的vm.js路径能看出来,你的Node.js版本应该是v6或者更低——这些老版本对ES6新特性的支持非常有限,而扩展运算符是ES6才引入的语法,所以旧Node根本识别不了...options这种写法。
内容的提问来源于stack exchange,提问作者Naresh Yarrsamsetti
相关产品推荐
相关产品推荐

