Heroku Node.js14环境运行discord.js出现??=语法错误怎么解决?
报错根因
你遇到的SyntaxError: Unexpected token '??='报错完全是Node.js版本不匹配导致:
2021-11-18T18:02:54.848192+00:00 app[worker.1]: agent ??= new https.Agent({ ...this.client.options.http.agent, keepAlive: true });
2021-11-18T18:02:54.848193+00:00 app[worker.1]: ^^^
2021-11-18T18:02:54.848193+00:00 app[worker.1]: SyntaxError: Unexpected token '??='
??=是ES2021新增的逻辑空赋值运算符,仅Node.js v15.0.0及以上版本支持,你使用的discord.js v13+最低要求Node.js v16.6.0,而Heroku默认使用v14版本的Node.js,自然无法识别该语法。
解决方案(推荐)
- 打开项目根目录下的
package.json文件,新增engines字段指定Node.js版本为16.x,配置参考如下:
{ "name": "discord-bot", "version": "1.0.0", "engines": { "node": "16.x" }, "dependencies": { "discord.js": "^13.0.0" // 其余原有依赖、配置保持不变 } }
- 将修改后的
package.json和对应的锁文件(package-lock.json/yarn.lock)一起提交到部署用的代码仓库 - 重新触发Heroku构建,Heroku会自动读取配置安装对应版本的Node.js,部署完成后即可正常运行
备选方案(不推荐)
如果因特殊限制无法升级Node.js版本,可临时将discord.js降级到v12版本,执行命令:npm install discord.js@12
该版本已停止官方维护,不支持Discord最新的交互、斜杠指令等功能,仅可作为临时应急使用。
内容的提问来源于stack exchange,提问作者timon111
相关产品推荐
相关产品推荐

