解决 Node.js 项目报 SyntaxError: Unexpected token ... 错误
问题
我们的天猫精灵服务是用 Node.js 做的。
- 今天在该项目中添加一个包
nzh
,我是在package.json
里面直接添加的,然后运行npm install
,运行后会安装nzh
包,同时也会更新其他需要更新的包。 - 然后 Debug,测试通过没有问题,接着发布到服务器上。服务器上运行
forever start xx.js
,竟然 stopped。 - 看了下log,竟然报错了,测试环境没有问题,生产环境却报错了。
报错如下:
1 | /xxx/node_modules/mqtt/node_modules/ws/lib/websocket.js:345 |
SyntaxError: Unexpected token ...
翻译中文为:
语法错误:意外的标记
很明显报错的为...
,语法错误,这肯定是ES特性不支持的问题,不支持那就是Node.js的版本的问题
解决
- 查看服务器Node.js版本为
6.9.2
- 查看测试环境Node.js版本为
12.13.1
果然版本不一致,考虑到服务器的 Node.js 版本确实有点低了,决定升级到最新稳定版本
- 安装 Node.js 版本管理工具
1
npm install -g n
- 安装最新稳定版 node
1
npm lts
- 使用 n 切换版本
1
2
3
4
5
6$ n
node/6.9.2
node/10.16.3
ο node/12.13.1
Use up/down arrow keys to select a version, return key to install, d to delete, q to quit - 查看Node.js版本
奇怪了,没有切换成功
通过搜索找到了原因:
n 默认安装路径是 /usr/local,若你的 node 不是在此路径下,n 切换版本就不能把bin、lib、include、share 复制该路径中,所以我们必须通过N_PREFIX变量来修改 n 的默认node安装路径。
通过 which
命令查看命令所在的路径。
which: 常用于查找可直接执行的命令。只能查找可执行文件,该命令基本只在$PATH路径中搜索,查找范围最小,查找速度快。默认只返回第一个匹配的文件路径,通过选项 -a 可以返回所有匹配结果。
具体请参考 node.js版本管理工具n无效的原理和解决方法
- 启动Node.js服务启动成功了,解决完成。
1
forever start xxx.js
思考
问题虽然是解决了。
或许你会有更多疑问了❓❓❓
- …操作符是什么?
- …操作符真的不支持 node v6.9.2 吗?
考虑到…操作符要介绍的内容较多,就不在这篇文章中写了。
请看下篇文章《JavaScript…延展操作符(Spread operator)》。
解决 Node.js 项目报 SyntaxError: Unexpected token ... 错误