开发Discord机器人用node-fetch出现ERR_REQUIRE_ESM错误如何解决?
报错原因
你安装的node-fetch v3及以上版本仅支持ES Module规范的导入方式,而你当前项目默认是CommonJS环境(package.json未配置"type": "module"),使用require()导入ESM规范的包就会触发该报错。
修复方案
你可以任选以下一种方案解决:
- 方案1:降级
node-fetch到v2版本(v2版本支持CommonJS的require导入,改动最小)
执行命令:npm install node-fetch@2,安装完成后原有代码无需其他修改即可运行。 - 方案2:使用动态import导入
node-fetch,无需修改配置和降级版本
将代码里的const fetch = require('node-fetch');替换为:
因为你的const fetch = (await import('node-fetch')).default;execute函数本身就是异步函数,直接使用await导入不会有语法问题。 - 方案3:将整个项目切换为ES Module规范
在package.json中新增配置项"type": "module",之后将项目中所有require()导入改为import导入,module.exports导出改为export/export default导出即可。
额外注意事项
你的代码还存在大小写拼写错误:定义的变量是onlineInfo,后续判断却写成了onlineinfo,JS对大小写敏感,该问题会导致后续逻辑报错,需要修改为一致的命名。
内容的提问来源于stack exchange,提问作者N-Man
相关产品推荐
相关产品推荐

