为什么我会收到 ReferenceError:AbortController 未在 Discord.js v13 中定义?

新手上路,请多包涵

今天 (7.8.2021) Discord.js v13 已经发布。所以我升级了我以前的 Discord.js 安装

npm i discord.js@latest

然后将我的基本 index.js 文件调整为这种状态(我遵循了 Discord.js 指南):

 const { Client, Intents } = require("discord.js");

const client = new Client({
  intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES],
});

client.once("ready", () => {
  console.log("Ready!");
});

client.login("my-token");

但是,当我尝试运行我的代码时,我不断收到此错误:

$节点。

(节点:11216)UnhandledPromiseRejectionWarning:ReferenceError:未定义 AbortController

在 RequestHandler.execute (C:\ pathTo \node_modules\discord.js\src\rest\RequestHandler.js:172:15)

自 2018 年以来,我一直在使用 Discord.js ,因此我对新版本遇到问题感到惊讶。这是 Discord.js v13 库的问题吗?如果不是,我该如何修复错误?

原文由 Behemoth 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 773
2 个回答

问题:

使用 Discord.js v13 的 先决条件 之一是您需要使用 NodeJS v16.6 或更高版本(强调我的):

v13 需要 Node 16.6 或更高版本 才能使用,因此请确保您是最新的。要检查您的节点版本,请使用 node -v


修复:

解决方法是更新您的节点版本,您可以通过运行 node -v 确认您当前的节点版本。有 多种不同的方法 来更新节点,如果您使用的是 Linux / iOS,一种方法是运行以下命令:

 > npm install -g n
> n latest

第一个命令安装命令行界面 n ,然后第二个命令使用 n 更新到最新稳定版本的节点。如果您使用的是 Windows,则可以按照 pradeek回答 中的概述安装 NVM

Heroku 用户注意事项

按照上述步骤更新节点版本后,您可能需要通过添加/更新引擎来更新 package.json 文件:

 "engines": {
  "node": "16.x"
}


为什么这在 v13 中中断了?:

在 discordjs 的几个版本之前,添加了一项功能,可以中止花费太长时间(超过 15 秒)的请求。为了实现这个功能,他们之前使用的是节点包 abort-controller 。然而,现在 nodejs 已经发展,它现在有自己的 AbortController 全局而不需要外部包。 Discord.js v13 现在依赖这个全局变量,因为它们 不再使用中止控制器包。为了使用 AbortController 由 nodejs 提供的全局,您需要使用节点 v15 或更高版本 - 但是,根据 discord.js 指南的建议,您应该使用 v16.6+ 来启用对它可能使用的其他功能。

原文由 Nick Parsons 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果你不想在你的所有系统中安装 node.js v16,而只是将它添加到你的机器人项目中,你可以这样做:

 npm install node@16.6.1 --save-exact

它会运行。

原文由 Douglas Lovera 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题