Node.js使用require加载node-fetch时报Must use import to load ES Module错误
问题原因
该报错是因为你安装的是node-fetch@3.x及以上版本,该版本起官方将包调整为纯ES Module格式,仅支持import语法引入,不再兼容CommonJS规范的require引入方式,和你自身项目是否配置"type": "module"无关。你之前删除node_modules和package-lock.json重装无效,是因为默认安装的还是最新的3.x版本,属于版本本身的特性限制,和依赖安装错误无关。
解决方案
你可以根据自己的项目情况选择以下任意一种方案解决:
- 方案1:降级到支持CommonJS的2.x版本(最省事,无需修改现有代码逻辑)
执行以下命令安装v2版本的node-fetch:
安装完成后原来的npm install node-fetch@2const fetch = require('node-fetch')代码可以直接正常使用。 - 方案2:保留3.x版本,在CommonJS文件中使用动态import引入
无需降级版本,将原来的require引入代码替换为动态引入写法即可:// 全局引入写法 const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args)); // 若在async函数内使用,也可以写成: async function yourRequestFunc() { const { default: fetch } = await import('node-fetch'); // 后续正常调用fetch即可 } - 方案3:切换项目为ESM规范
如果你愿意将整个项目切换为ES Module规范,可以在自己项目的package.json中添加"type": "module"配置,之后将所有require写法替换为import语法即可:import fetch from 'node-fetch'
注意:不要按照报错提示修改node_modules/node-fetch/package.json的配置,该修改无意义,下次重装依赖就会被覆盖。
内容的提问来源于stack exchange,提问作者xvma
相关产品推荐
相关产品推荐

