【问题标题】:require('node-fetch') gives ERR_REQUIRE_ESMrequire('node-fetch') 给出 ERR_REQUIRE_ESM
【发布时间】:2021-11-04 07:06:37
【问题描述】:

我只是用

const fetch = require('node-fetch')

我得到了

Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\Alex\Desktop\rollbot\node_modules\node-fetch\src\index.js from C:\Users\Alex\Desktop\rollbot\index.js not supported.
Instead change the require of C:\Users\Alex\Desktop\rollbot\node_modules\node-fetch\src\index.js in C:\Users\Alex\Desktop\rollbot\index.js to a 
dynamic import() which is available in all CommonJS modules.
{
  code: 'ERR_REQUIRE_ESM'
}

我所有的其他包都可以工作,只有 node-fetch 可以做到这一点。我应该怎么做才能使用 node-fetch?

【问题讨论】:

    标签: javascript node.js npm fetch


    【解决方案1】:

    来自node-fetchpackage readme:

    node-fetch 是一个 ESM-only 模块 - 你不能用 要求。我们建议您继续使用使用 CommonJS 构建的 v2 除非你自己使用 ESM。我们将继续发布严重的错误 修复它。

    如果你想require它,那就降级到v2。

    您的另一个选择是使用 async import('node-fetch').then(...)

    【讨论】:

    • 或者更好地使用 Axios,因为 ES、CommonJs 和 typescript 配置,真的很混乱。
    • 安装第二个版本:npm install node-fetch@2
    【解决方案2】:

    就我而言,我个人发现使用 require ('cross-fetch') 更容易。文档在这里:cross-fetch

    它可以在 CommonJS 以及 ES6 模块中使用。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
    • 我试图将 node-fetch 与 typescript 一起使用,并且使用 cross-fetch 没有任何问题。
    • 这就是答案。我浪费了太多时间来尝试使node-fetch 工作(v2 没有打字稿类型,v3 仅在 ESM 中工作,这在 node.js 中的 TS 中还没有得到很好的支持,呃......)。 cross-fetch 可以正常工作。
    • Read the docs: cross-fetch 是如何工作的? (...) 如果你在 node 中,它会为你提供 node-fetch 库。它使用 node-fetch v2,所以你应该只降级 node-fetch 而不是添加另一个不必要的依赖层。
    【解决方案3】:

    我发现最新版本的 node-fetch 默认更改为 ES 模块。你可以这样做:

    1. 使用npm uninstall node-fetch卸载当前版本的node-fetch
    2. 安装第二版:npm install node-fetch@2

    它对我有用!

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2022-08-23
      • 2023-01-05
      • 2021-12-07
      • 2022-11-09
      • 2022-11-23
      • 2016-09-01
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多