ERR_REQUIRE_ESM报错:require()不支持加载ES模块该如何解决?
报错原因与解决方案
该报错为CommonJS规范的代码使用require()引入了仅支持ESM规范的normalize-url依赖包导致:normalize-url v7及以上版本为纯ESM包,不再兼容CommonJS的require()调用。
可行解决方案
- 方案1:降级normalize-url到支持CommonJS的版本,改造成本最低。
执行以下命令重新安装依赖:
安装完成后原有npm uninstall normalize-url npm install normalize-url@6require()调用代码无需修改即可正常运行。 - 方案2:保留高版本normalize-url,替换
require()为动态import()调用。
Node.js 14.13.0及以上版本支持在CommonJS代码中使用异步动态导入,原有代码:
替换为:const normalizeUrl = require('normalize-url')// 顶层调用可直接使用顶级await,放在普通函数内时需给函数添加async关键字 const normalizeUrl = (await import('normalize-url')).default - 方案3:全项目切换为ESM规范。
若计划整体升级项目到ESM规范,可执行以下操作:- 在项目根目录package.json中添加配置:
"type": "module" - 把项目内所有
require()调用统一替换为ESM的import语法,示例:
import normalizeUrl from 'normalize-url'- 所有相对路径导入语句补全文件后缀,例如
import './utils'需修改为import './utils.js'
- 在项目根目录package.json中添加配置:
注意:不要手动修改node_modules目录下normalize-url包的package.json删除
"type": "module"配置,该修改会在下次重新安装依赖时被覆盖,无法持久生效。
内容的提问来源于stack exchange,提问作者Prajul Aaditya
相关产品推荐
相关产品推荐

