Discord.js从v12升级到v13出现??=语法错误 Node16.7.0环境如何修复?
问题原因
你遇到的SyntaxError: Unexpected token '??='报错是语法不兼容问题:??=是ES2021标准引入的逻辑空赋值运算符,Node.js从v15.0.0版本才开始原生支持该语法。虽然你在终端查询到的Node版本是v16.7.0(满足语法支持要求,也满足Discord.js v13要求的最低v16.6.0的版本要求),但实际执行你项目代码的Node.js版本远低于v15.0.0,和你查询到的版本不是同一个实例。
常见的版本不一致场景包括:
- 使用了nvm、n等Node版本管理工具,仅在当前交互式shell切换到了v16.7.0,运行项目的脚本、后台进程(如pm2、systemd服务)调用的仍是系统默认的旧版Node
- 项目配置了版本约束,或虚拟环境中内置了旧版Node
- 在容器、虚拟主机中运行项目,容器内部的Node版本和你本地查询的版本不一致
- TypeScript项目的
tsconfig.json中target字段设置低于ES2021,导致语法转译错误
修复步骤
- 首先确认实际运行的Node版本,在项目入口文件最顶部添加如下代码:
console.log('实际运行Node版本:', process.version);
启动项目后如果输出的版本低于v15.0.0,即可确认版本不匹配问题。
2. 根据对应的场景修复:
- 若使用pm2等进程管理器:执行
pm2 restart 你的进程名 --interpreter <v16.7.0版本Node的可执行文件绝对路径>,或直接执行pm2 update后在当前shell重新启动进程 - 若使用nvm等版本管理工具:在项目启动脚本开头添加版本切换命令,比如nvm用户添加
nvm use 16.7.0后再执行启动命令 - 若为系统多版本共存:直接用v16.7.0 Node的绝对路径启动项目,示例:
/usr/local/nvm/versions/node/v16.7.0/bin/node index.js - 若为TypeScript项目:修改
tsconfig.json中的target字段为ES2021或更高版本
- 验证修复:重启项目后如果报错消失,即可删掉步骤1添加的版本打印代码。
内容的提问来源于stack exchange,提问作者이연준
相关产品推荐
相关产品推荐

