Heroku部署Node.js Discord机器人出现Unexpected token '??='错误如何解决
错误原因
报错中的??=是ES2021新增的逻辑空赋值运算符,仅Node.js 15.0.0及以上版本原生支持。你使用的discord.js v13本身最低要求Node.js 16.6.0,本地16.x版本符合要求可以正常运行,但Heroku未指定Node版本时会默认使用旧的LTS版本,无法识别该语法就会抛出错误。另外你配置了worker类型的Procfile,但日志显示当前启动的是web进程,也会导致进程类型不匹配的后续问题。
修复步骤
- 在
package.json的顶层新增engines字段,指定符合要求的Node.js版本,示例如下:
{ "name": "discord-bot", "version": "1.0.0", "engines": { "node": "16.x" }, "description": "", "main": "src/index.js", "scripts": { "start": "node .", "test": "echo \"Error: no test specified\" && exit 1", "dev": "nodemon src/index.js" }, "dependencies": { "cli": "^1.0.1", "discord.js": "^13.3.1", "discord.js-commando": "^0.12.3" }, "devDependencies": { "nodemon": "^2.0.14" } }
如果想要更稳定的兼容性,也可以将node版本指定为16.13.x,匹配16.x的长期支持版本。
- 调整Heroku的进程启动规则:关闭默认的web进程,启用你配置的worker进程。可以直接通过Heroku CLI执行命令
heroku ps:scale web=0 worker=1,也可以登录Heroku控制台,在对应应用的资源标签页手动调整dyno的开关状态。 - 将修改后的
package.json提交到Git仓库,重新推送到Heroku触发构建,构建完成后worker进程就会正常启动。
内容的提问来源于stack exchange,提问作者Matheus Chiarelli
相关产品推荐
相关产品推荐

