解决Node.js项目运行报错SyntaxError: Unexpected token …(解决Node.js低版本不支持…操作符的问题)
目录
问题
我们的天猫精灵服务是用Node.js做的,今天在该项目中添加一个包nzh
,我是在package.json
里面直接添加的,然后运行npm install
,运行后会安装nzh
包,同时也会更新其他需要更新的包。
然后Debug,测试通过没有问题,接着发布到服务器上。
服务器上运行forever start xx.js
,竟然stopped。
看了下log,竟然报错了,测试环境没有问题,生产环境却报错了。
报错如下:
/xxx/node_modules/mqtt/node_modules/ws/lib/websocket.js:345
...options
^^^
SyntaxError: Unexpected token ...
at Object.exports.runInThisContext (vm.js:76:16)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/xxx/node_modules/mqtt/node_modules/ws/index.js:3:19)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
1234567891011121314151617181920
SyntaxError: Unexpected token ...
翻译中文为
语法错误:意外的令牌...
很明显报错的为...
,语法错误,这肯定是ES特性不支持的问题,不支持那就是Node.js的版本的问题
解决
- 查看服务器Node.js版本为
6.9.2
- 查看测试环境Node.js版本为
12.13.1
果然版本不一致,考虑到服务器的Node.js版本确实有点低了,决定升级到最新稳定版本
- 安装Node.js版本管理工具
npm install -g n
1
- 安装最新稳定版 node
npm lts
1
- 使用 n 切换版本
n
1
\4. 查看Node.js版本
奇怪了,没有切换成功
通过搜索找到了原因:
n 默认安装路径是 /usr/local,若你的 node 不是在此路径下,n 切换版本就不能把bin、lib、include、share 复制该路径中,所以我们必须通过N_PREFIX变量来修改 n 的默认node安装路径。
具体请参考
node.js版本管理工具n无效的原理和解决方法
- 启动Node.js服务
forever start xxx.js
1
启动成功了,解决完成。
思考
问题虽然是解决了。
或许你会有更多疑问了❓❓❓
- …操作符是什么?
- …操作符真的不支持node v6.9.2吗?
考虑到…操作符要介绍的内容较多,就不在这篇文章中写了。
请看下篇文章《JavaScript…延展操作符(Spread operator)》
支持🤟
🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟
- 我会持续编写文章,保持每周至少一篇文章。💪
- 有时候编写一篇文章需要大量时间。💪
- 您只需一秒即可完成【点赞👍或关注❤️】。💪
- 您的支持将给与我更大的动力。💪
🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟🤟