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

转译使用require引入node-fetch的代码出现报错的正确解决方法是什么?

node-fetch v3+ ESM兼容问题解决方案

node-fetch 从v3版本开始全面转为纯ESM包,package.json中自带"type": "module"配置,不支持直接在CommonJS项目中用require语法导入,以下是可选用的长期解决方案:

对应错误提示:...firebase_datasource.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.

方案1:保持自身项目为CommonJS规范(继续使用require)

  • 使用import()动态导入语法加载node-fetch,该语法原生支持在CommonJS文件中异步加载ESM模块,示例用法如下:
async function yourBusinessLogic() {
  // 解构获取default导出的fetch方法以及相关工具类
  const { default: fetch, Headers, Request, Response } = await import('node-fetch');
  // 后续正常使用fetch相关能力
  const response = await fetch('你的目标请求地址');
  const result = await response.json();
}
  • 注意动态导入为异步逻辑,需要放在async函数内或者用.then()链式调用处理。

方案2:升级自身项目为ESM规范

  • 在你自己项目根目录的package.json中添加配置:"type": "module",此时项目内所有.js后缀文件会默认被识别为ESM模块,可直接用import fetch from 'node-fetch'语法导入依赖,不需要再转译为require语法。
  • 若项目中仍有需要保留的CommonJS格式文件,只需将对应文件后缀改为.cjs,Node.js会自动按CommonJS规范解析。

可选方案:使用社区兼容的CommonJS发行版

如果不想调整现有代码的异步逻辑,可以安装社区预转译的CommonJS版本node-fetch-cjs,该版本和官方原版API完全一致,安装后可直接用require导入:

  • 安装命令:npm install node-fetch-cjs
  • 导入示例:const fetch = require('node-fetch-cjs')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:05