You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript无法导入node-fetch的ERR_REQUIRE_ESM报错求助

解决TypeScript项目中node-fetch导入的ERR_REQUIRE_ESM报错

问题原因

node-fetch v3及以上版本是纯ESM模块,而你的TypeScript配置编译输出的是CommonJS格式,Node.js不允许用require()加载ESM模块,因此触发该报错。

解决方案

方案1:将项目切换为ESM输出(推荐)

  1. 修改tsconfig.json:
    • 将module字段改为ESNext或ES2020
    • 将moduleResolution字段改为node16或nodenext
  2. 在项目根目录的package.json中添加:
    "type": "module"
    
  3. 注意:ESM模块要求导入时必须添加文件扩展名,比如TS文件中导入其他模块要写成import xxx from './xxx.js'(编译后Node会识别正确路径)

方案2:降级node-fetch到v2版本(兼容CommonJS)

如果不想修改项目模块系统,可以安装支持CommonJS的node-fetch v2:

npm uninstall node-fetch
npm install node-fetch@2

安装完成后,原有的import fetch from "node-fetch";代码即可正常运行。

方案3:使用动态导入(临时 workaround)

如果上述两种方案都不适用,可以改用动态导入的方式加载node-fetch:

async function useFetch() {
  const { default: fetch } = await import("node-fetch");
  const res = await fetch("https://example.com");
  const data = await res.json();
  // 后续业务逻辑
}

注意:动态导入是异步操作,所有依赖fetch的代码都需要放在异步函数中。

内容的提问来源于stack exchange,提问作者user14505884

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:15:57