使用node-fetch发起请求时出现ERR_REQUIRE_ESM错误如何解决?
问题根因
node-fetch@3.x 及以上版本仅支持ES Module规范导入,不再兼容CommonJS的require()语法,同时Node.js 14.17.6版本对ESM的默认支持存在限制,配置不匹配就会触发两类报错。你添加"type": "module"后仍然报错,是因为仅修改了package.json配置,没有同步把代码里的require语法改为ESM对应的import语法。
解决方案
以下两种方案二选一即可:
方案1:降级node-fetch到2.x版本(操作最简单,无需修改原有代码结构)
node-fetch 2.x版本长期支持CommonJS规范,适配性更强:
- 卸载当前3.x版本:
npm uninstall node-fetch
- 安装2.x稳定版本:
npm install node-fetch@2
- 原有
index.js代码、package.json配置都不需要额外修改,直接运行即可正常请求。
方案2:适配ES Module规范(保留使用3.x版本)
如果需要使用node-fetch 3.x的新特性,按以下步骤调整:
- 在
package.json中添加"type": "module"配置,修改后如下:
{ "name": "Fetch_PBI_Access_Token", "version": "1.0.0", "type": "module", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "node-fetch": "^3.0.0" } }
- 修改
index.js的导入语法为ESM格式:
import fetch from 'node-fetch' fetch("https://api.github.com/users") .then((res) => res.json()) .then((res) => console.log(res));
- Node.js 14版本运行ESM模块需要添加启动参数,执行以下命令启动:
node --experimental-specifier-resolution=node index.js
如果不想加额外参数,可以升级Node.js到16.x及以上版本,直接运行node index.js即可。
内容的提问来源于stack exchange,提问作者Gangrel
相关产品推荐
相关产品推荐

