Next.js升级后出现ERR_REQUIRE_ESM与package.json错误该如何修复?
问题成因
你错误的配置操作是所有报错的核心来源:
- Next.js 11 原生不支持项目根目录
package.json配置"type": "module",该特性的完整支持是在Next.js 12及后续版本才落地的 - 当你添加了
"type": "module"后,Node.js会将项目内所有.js后缀的文件识别为ES模块,但Next.js 11的内部加载逻辑仍使用CommonJS的require()语法加载配置、编译产物,就会触发ERR_REQUIRE_ESM错误 - 你第一次报错的本质就是已经存在的
"type": "module"配置把CommonJS写法的next.config.js识别成了ES模块,后续你同时改配置后缀+保留"type": "module"的操作,进一步导致Next编译生成的.next目录下的产物也被识别为ES模块,触发二次报错
可直接生效的临时修复方案
按顺序执行以下操作即可:
- 打开根目录
package.json,删除你添加的"type": "module"配置项 - 把所有你修改过后缀的文件改回原名:
- 将
next.config.cjs改回next.config.js - 将
_document.cjs改回_document.js
- 将
- 清除缓存与旧依赖,重新安装启动:
# Windows系统可手动删除对应文件夹/文件,或用PowerShell的Remove-Item命令 rm -rf node_modules .next package-lock.json yarn.lock pnpm-lock.yaml # 重新安装依赖 npm install # 启动开发服务测试 npm run dev
关于兼容性的说明
你提到的"type": "module"配置语法本身是正确的,但不符合Next.js 11的运行要求。Next.js 11本身是对10版本的CommonJS写法做了向下兼容的,本次问题并非版本升级的兼容性缺陷,而是错误的配置触发了Node.js的模块规则冲突。如果你后续需要使用ES模块写法的配置,建议升级到Next.js 12.2+版本,该版本开始正式支持ES模块格式的next.config.js与项目级"type": "module"配置。
内容的提问来源于stack exchange,提问作者Zac1
相关产品推荐
相关产品推荐

