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

Posted

技术标签:

【中文标题】为啥我收到 ReferenceError:AbortController 未在 Discord.js v13 中定义?【英文标题】:Why am I getting a ReferenceError: AbortController is not defined in Discord.js v13?为什么我收到 ReferenceError:AbortController 未在 Discord.js v13 中定义? 【发布时间】:2021-11-27 18:32:44 【问题描述】:

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

npm i discord.js@latest

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

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");

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

$ 节点。

(node:11216) UnhandledPromiseRejectionWarning: ReferenceError: AbortController is not defined

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

自 2018 年以来,我一直与 Discord.js 合作,因此我很惊讶我在使用新版本时遇到了问题。 这是Discord.js v13 库的问题吗?如果不是,我该如何解决这个错误?

【问题讨论】:

你用的是什么版本的Node?​​span> ^^ AbortContoller 仅在 v15 中添加到 Node.js API:nodejs.org/api/globals.html#globals_class_abortcontroller 我使用的是 v14.15.4。刚刚更新了我的 Node 版本。现在一切正常。 【参考方案1】:

N,解决方案中使用的更新程序,不适用于 Windows 操作系统。 如果您使用 Windows,仍然有一种更新方法。 转至Node.JS installation website

如果您在没有点击我提供的链接的情况下手动前往那里,则需要从 LTS 选项切换到 Current。

^ 在这里看到

选择 MSI 安装程序和安装旧 Node.JS 版本的架构。

如果您不知道安装旧 Node.JS 版本的架构,您可以检查 nodejs 文件夹是在“C:/Program Files”还是“C:/Program Files (x86)”中"

然后像第一次一样安装 Node.JS。

享受吧!

【讨论】:

【参考方案2】:

问题:

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

v13 需要 Node 16.6 或更高版本才能使用,因此请确保您已达到 日期。要检查您的 Node 版本,请使用 node -v


修复:

修复是更新您的节点版本,您可以通过运行node -v 来确认您当前的节点版本。有一个variety of different ways 来更新节点,如果您使用的是 Linux / ios,一种方法是运行以下命令:

> npm install -g n
> n latest

第一个命令安装命令行界面n,然后第二个使用n更新到最新的稳定版node。如果您使用的是 Windows,则可以按照this answer by pradeek 中的说明安装 NVM。

Heroku 用户注意事项

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

"engines": 
  "node": "16.x"


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

在几个版本的 discordjs 之前,添加了一项功能,即中止耗时过长(超过 15 秒)的请求。为了实现这个功能,他们之前使用的是节点包abort-controller。然而,现在 nodejs 已经进化了,它现在有自己的AbortController 全局而不需要外部包。 Discord.js v13 现在依赖于这个全局变量,因为它们是 no longer using the abort controller package。为了使用 nodejs 提供的 AbortController 全局,您需要使用 node v15 或更高版本 - 但是,根据 discord.js 指南的建议,您应该使用 v16.6+ 来启用对它可能的其他功能的支持使用。

【讨论】:

【参考方案3】:

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

npm install node@16.6.1 --save-exact

它会运行。

【讨论】:

以上是关于为啥我收到 ReferenceError:AbortController 未在 Discord.js v13 中定义?的主要内容,如果未能解决你的问题,请参考以下文章

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

为啥我在导入客户端库时收到 ReferenceError: self is not defined?

我收到错误:fs.js:36 = primordials; ^ ReferenceError: 未定义原语

如果在声明变量之前使用了变量,为啥不会抛出 ReferenceError?

为啥 typeof 有时只抛出 ReferenceError?

尝试使用 puppeteer 插件,但我不断收到 Unhandled Promise Rejection 的错误:ReferenceError: Can't find variable: requir