Discord 机器人和 Heroku

Discord Bot and Heroku

您好,我的 discord 机器人需要一些帮助。我搜索了错误并尝试修复它,但它就是行不通。这可能是我的编码错误。请帮忙,谢谢! Link 用于 GitHub 存储库: https://github.com/Verggz/Electrolite

编辑:不断发生的错误 警告:要加载 ES 模块,请在 package.json 中设置 "type": "module" 或使用 .mjs 扩展名。

2022-01-23T15:14:15.475287+00:00 app[worker.1]: (Use `node --trace-warnings ...` to show where the warning was created)
2022-01-23T15:14:15.476783+00:00 app[worker.1]: /app/main.ts:1
2022-01-23T15:14:15.476784+00:00 app[worker.1]: import express from 'express';
2022-01-23T15:14:15.476785+00:00 app[worker.1]: ^^^^^^
2022-01-23T15:14:15.476785+00:00 app[worker.1]:
2022-01-23T15:14:15.476785+00:00 app[worker.1]: SyntaxError: Cannot use import statement outside a module
2022-01-23T15:14:15.476786+00:00 app[worker.1]:     at wrapSafe (internal/modules/cjs/loader.js:1001:16)
2022-01-23T15:14:15.476786+00:00 app[worker.1]:     at Module._compile (internal/modules/cjs/loader.js:1049:27)
2022-01-23T15:14:15.476786+00:00 app[worker.1]:     at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
2022-01-23T15:14:15.476787+00:00 app[worker.1]:     at Module.load (internal/modules/cjs/loader.js:950:32)
2022-01-23T15:14:15.476787+00:00 app[worker.1]:     at Function.Module._load (internal/modules/cjs/loader.js:790:12)
2022-01-23T15:14:15.476787+00:00 app[worker.1]:     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
2022-01-23T15:14:15.476788+00:00 app[worker.1]:     at internal/main/run_main_module.js:17:47

package.json:

{
  "name": "electrolite",
  "version": "0.0.1",
  "description": "literally just project scyll v2 but better",
  "main": "./build/main.js",
  "scripts": {
    "start": "node --max-old-space-size=512 ./build/main.js && export NODE_ENV=production",
    "dev": "tsc && node ./build/main.js",
    "bot": "node ./build/bot/main.bot.js",
    "botdev": "tsc && node ./build/bot/main.bot.js"
  },
  "keywords": [
    "minecraft"
  ],
  "author": "PenguinDetox",
  "license": "ISC",
  "dependencies": {
    "@discordjs/builders": "^0.11.0",
    "@discordjs/rest": "^0.2.0-canary.0",
    "axios": "^0.24.0",
    "discord-api-types": "^0.26.1",
    "discord.js": "^13.5.0",
    "express": "^4.17.2",
    "fs-extra": "^10.0.0",
    "hypixel-api-reborn": "^9.0.3",
    "prismarine-nbt": "^2.0.0",
    "set-interval-async": "^2.0.3"
  },
  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/fs-extra": "^9.0.13",
    "@types/node": "^17.0.4",
    "@types/set-interval-async": "^1.0.0"
  }
}

过程文件:

worker: node main.ts

我不太确定你想在这里做什么,但目前的主要问题是你要求 Heroku 运行 你的 TypeScript 代码,而不是编译后的 JavaScript。这是通过您的 Procfile:

完成的
worker: node main.ts

您的 package.json 中有一个完全不同的命令:

"start": "node --max-old-space-size=512 ./build/main.js && export NODE_ENV=production",

这可能更接近你想要的,但我们不能就这样使用它。

&& export NODE_ENV 部分不太可能做任何有用的事情:它将等到您的代码停止 运行ning,然后导出环境变量,然后退出。让我们删除它:

"start": "node --max-old-space-size=512 ./build/main.js",

现在的问题是 build/main.js 不存在。您需要告诉 Heroku 在部署期间构建它。根据您的 dev 脚本,我相信只涉及 运行ning tsc.

让我们添加一个构建脚本来执行此操作:

"build": "tsc",
"start": "node --max-old-space-size=512 ./build/main.js",

(我在你的 devDependencies 中没有看到 typescript,这意味着 tsc 可能无法 运行。确保在你的 package.json.)

好的,所以您的 build 脚本现在将告诉 Heroku 在部署期间构建您的应用程序并且您的 build/main.js 应该存在。您的 start 脚本已更新。

让我们来处理你的 Procfile。更新它以匹配新的 start 脚本:

worker: node --max-old-space-size=512 ./build/main.js

提交所有这些更改并重新部署。