TypeScript无法导入node-fetch的ERR_REQUIRE_ESM报错求助
解决TypeScript项目中node-fetch导入的ERR_REQUIRE_ESM报错
问题原因
node-fetch v3及以上版本是纯ESM模块,而你的TypeScript配置编译输出的是CommonJS格式,Node.js不允许用require()加载ESM模块,因此触发该报错。
解决方案
方案1:将项目切换为ESM输出(推荐)
- 修改
tsconfig.json:- 将
module字段改为ESNext或ES2020 - 将
moduleResolution字段改为node16或nodenext
- 将
- 在项目根目录的
package.json中添加:"type": "module" - 注意: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
相关产品推荐
相关产品推荐

