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

Node.js使用require导入node-fetch报ERR_REQUIRE_ESM错误如何解决

报错原因

你遇到的报错是因为node-fetch从v3版本开始,完全放弃了对CommonJS规范的支持,仅允许通过ES Module的import语法导入。而你通过npm init默认生成的项目是CommonJS规范,使用require()导入ES Module模块不符合规范,因此触发了ERR_REQUIRE_ESM错误。

可选解决方法

你使用的Node.js v16.9.0版本支持以下所有方案,可根据自身需求选择:

方案1:降级使用node-fetch v2版本(最便捷,无需修改项目规范)

node-fetch v2版本完全支持CommonJS规范,适合不想调整现有项目写法的场景:

  • 卸载当前已安装的v3版本:npm uninstall node-fetch
  • 安装支持CommonJS的v2最新稳定版:npm install node-fetch@2
  • 原有代码const fetch = require("node-fetch");无需修改,直接运行即可。

方案2:在CommonJS项目中使用动态import()导入(无需降级依赖,无需修改项目规范)

CommonJS规范支持用动态import()方法加载ES Module模块,可直接修改导入代码实现兼容:

// 用法1:封装为调用时自动加载的方法,无需改原有调用逻辑
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));

// 用法2:在async函数内按需导入使用
async function request() {
  const { default: fetch } = await import('node-fetch');
  // 后续调用fetch的业务逻辑写在这里
}

方案3:将项目切换为ES Module规范(适合全项目计划使用ES Module开发的场景)

如果后续项目全量使用ES Module规范开发,可直接调整项目配置:

  • 打开项目根目录的package.json文件,在顶层配置中添加"type": "module"
  • 将原有导入代码替换为ES Module导入语句:import fetch from 'node-fetch'
  • 注意:修改后整个项目所有文件都会按ES Module规范解析,不能再使用require()、module.exports等CommonJS语法,需要同步调整其余代码的导入导出写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:45:03