使用Heroku部署Discord机器人遇模块找不到问题求助
问题:Heroku部署Discord机器人时出现MODULE_NOT_FOUND错误
首次尝试将Discord机器人部署到Heroku,代码已成功推送至应用,但添加config.json的token并启动worker后出现报错:
2022-10-23T04:55:31.815878+00:00 app[Worker.1]: Node.js v18.11.0 2022-10-23T04:55:31.927217+00:00 heroku[Worker.1]: Process exited with status 1 2022-10-23T04:55:31.983366+00:00 heroku[Worker.1]: State changed from up to crashed 2022-10-23T04:55:31.986264+00:00 heroku[Worker.1]: State changed from crashed to starting 2022-10-23T04:55:34.526205+00:00 heroku[Worker.1]: Starting process with command `node ./src/bot.js` 2022-10-23T04:55:35.356859+00:00 heroku[Worker.1]: State changed from starting to up 2022-10-23T04:55:36.599794+00:00 heroku[Worker.1]: Process exited with status 1 2022-10-23T04:55:36.413725+00:00 app[Worker.1]: node:internal/modules/cjs/loader:998 2022-10-23T04:55:36.413733+00:00 app[Worker.1]: throw err; 2022-10-23T04:55:36.413733+00:00 app[Worker.1]: ^ 2022-10-23T04:55:36.413733+00:00 app[Worker.1]: 2022-10-23T04:55:36.413734+00:00 app[Worker.1]: Error: Cannot find module '/app/src/bot.js' 2022-10-23T04:55:36.413734+00:00 app[Worker.1]: at Module._resolveFilename (node:internal/modules/cjs/loader:995:15) 2022-10-23T04:55:36.413735+00:00 app[Worker.1]: at Module._load (node:internal/modules/cjs/loader:841:27) 2022-10-23T04:55:36.413735+00:00 app[Worker.1]: at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) 2022-10-23T04:55:36.413735+00:00 app[Worker.1]: at node:internal/main/run_main_module:23:47 { 2022-10-23T04:55:36.413748+00:00 app[Worker.1]: code: 'MODULE_NOT_FOUND', 2022-10-23T04:55:36.413749+00:00 app[Worker.1]: requireStack: [] 2022-10-23T04:55:36.413749+00:00 app[Worker.1]: } 2022-10-23T04:55:36.413755+00:00 app[Worker.1]: 2022-10-23T04:55:36.413755+00:00 app[Worker.1]: Node.js v18.11.0 2022-10-23T04:55:36.653228+00:00 heroku[Worker.1]: State changed from up to crashed
当前项目的package.json配置:
{ "name": "mudbot", "version": "1.0.0", "description": "MUDbot", "main": "bot.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Shirish Sarkar", "license": "ISC", "dependencies": { "discord.js": "^14.5.0", "env": "^0.0.2" } }
解决方法
经过排查,问题由两个原因导致,修正后机器人可正常运行:
修正Procfile路径:报错显示无法找到
/app/src/bot.js,说明Procfile中的启动命令路径与实际文件位置不匹配。根据package.json中main字段为bot.js,可知文件在根目录,因此将Procfile中的命令改为node bot.js。替换config.json为.env环境变量:Heroku更适合使用环境变量管理敏感信息,而非本地的config.json:
- 安装
dotenv依赖:npm install dotenv - 在项目根目录创建
.env文件,添加:
同时将DISCORD_TOKEN=你的机器人Token.env加入.gitignore,避免提交到代码仓库。 - 在bot.js中引入并加载环境变量:
require('dotenv').config(); // 使用时通过process.env.DISCORD_TOKEN获取Token - 登录Heroku控制台,进入对应应用的「设置」页面,在「配置变量」中添加
DISCORD_TOKEN,填入机器人的Token值。
- 安装
内容的提问来源于stack exchange,提问作者usselman
相关产品推荐
相关产品推荐

