Node.js引入node-fetch时报ERR_REQUIRE_ESM错误如何解决?
核心原因
你安装的是v3及以上版本的node-fetch,该版本开始仅支持ES Module(ESM)规范导入,不再兼容CommonJS的require()语法,而你当前项目代码采用的是CommonJS规范,因此触发报错。
可选解决方案
方案1:降级安装node-fetch v2(改造成本最低,无需修改现有代码逻辑)
v2版本的node-fetch仍兼容CommonJS规范,直接执行命令重装指定版本即可:
npm uninstall node-fetch && npm install node-fetch@2
修改完成后原有const fetch = require('node-fetch')代码无需改动,直接运行即可正常执行。
方案2:将项目整体切换为ESM规范(适配最新版本要求)
若你希望使用最新版的node-fetch,可将项目改为ESM规范,操作步骤如下:
- 在项目根目录的
package.json文件中新增配置项:"type": "module" - 修改现有代码的导入导出语法:
secrets.js修改为:
const secrets = {} secrets.key = "..." secrets.discord = "..." secrets.cityName = "..." export default secrets
main.js修改为:
import secrets from './secrets.js' import fetch from 'node-fetch' async function main(){ console.log(secrets) } main()
方案3:在CommonJS规范下使用动态import导入(无需修改项目整体规范)
Node 14+已支持在CommonJS代码中通过异步动态导入语法加载ESM模块,你可以直接修改main.js代码适配:
const secrets = require('./secrets.js') async function main(){ // 动态导入node-fetch const fetch = (await import('node-fetch')).default console.log(secrets) // 后续可正常调用fetch方法 } main()
内容的提问来源于stack exchange,提问作者telomerase
相关产品推荐
相关产品推荐

