错误 [ERR_REQUIRE_ESM]: ES 模块的 require() ... 不支持

我正在使用 TypeScriptdiscord.js 中制作一个不和谐的机器人。当我今天早上尝试编译代码时,我收到了这个错误:

C:SECRETKostegatordistUtilgetMeme.js:17
const node_fetch_1 = __importDefault(require("node-fetch"));
                                     ^

Error [ERR_REQUIRE_ESM]: require() of ES Module C:SECRETKostegatornode_modulesnode-fetchsrcindex.js from C:SECRETKostegatordistUtilgetMeme.js not supported.
Instead change the require of index.js in C:SECRETKostegatordistUtilgetMeme.js to a dynamic import() which is available in all CommonJS modules.
    at Object.<anonymous> (C:SECRETKostegatordistUtilgetMeme.js:17:38)
    at Object.<anonymous> (C:SECRETKostegatordistUtilindex.js:15:14)
    at Object.<anonymous> (C:SECRETKostegatordistCommandsBotOwnerstartAutoUpdate.js:4:16)
    at C:SECRETKostegatordistClientindex.js:61:41
    at Array.forEach (<anonymous>)
    at ExtendedClient.<anonymous> (C:SECRETKostegatordistClientindex.js:58:48)        
    at Generator.next (<anonymous>)
    at C:SECRETKostegatordistClientindex.js:27:71
    at new Promise (<anonymous>)
    at __awaiter (C:SECRETKostegatordistClientindex.js:23:12)
    at ExtendedClient.init (C:SECRETKostegatordistClientindex.js:51:16)
    at Object.<anonymous> (C:SECRETKostegatordistindex.js:19:4) {
  code: 'ERR_REQUIRE_ESM'
}

这是 GitHub 存储库: Kostegator

stack overflow Error [ERR_REQUIRE_ESM]: require() of ES Module ... not supported
原文答案
author avatar

接受的答案

node-fetch 的当前版本仅与ESM导入兼容(使用 import ),而不是使用 require() 的Commonjs模块。

您有这些选择可以解决:

1.将项目切换到ESM模块,然后加载 import fetch from 'node-fetch';

2.在最新版本的nodejs中,您可以使用 let fetch = await import('node-fetch') 将ESM模块动态导入commonjs模块。

3.使用 node-fetch 的V2版本,该版本仍然支持 require() 的加载,如DOC中所述 here 所述。


答案:

作者头像

在最新更新中, node-fetch 仅使用 import 来工作

您可以通过 npm i node-fetch@2.6.1 安装它的旧版本