Vite安装ESM-only插件遇require加载错误,求排查方案
核心原因
这个错误的本质是你的项目被 Node.js 判定为 CommonJS(CJS)环境,即便vite.config.js使用了ESM的import语法,Vite在加载配置文件时仍会以CJS模式处理,最终尝试用require()加载仅支持ESM的example-package,导致模块加载冲突。
具体触发场景
项目
package.json未声明ESM类型
Node.js默认将.js后缀文件视为CJS模块,必须在项目根目录的package.json中添加"type": "module"字段,才能让Node.js把所有.js文件当作ESM模块解析。缺少这个字段时,即使配置文件用了import,Node.js仍会以CJS模式加载它,进而导致Vite内部用require加载ESM包失败。配置文件加载模式强制为CJS
若你曾修改配置文件名(比如改为vite.config.cjs),或通过Vite命令行参数指定了CJS格式的配置文件,Vite会强制以CJS模式加载配置,同样会触发该错误。不过你当前使用vite.config.js,这种情况概率较低。ESM包自身配置异常(罕见)
极少数情况下,如果example-package的package.json未正确声明ESM属性(比如缺少"type": "module"或exports配置错误),也可能导致识别失败,但你的错误提示明确标注它是ESM-only,所以这个可能性很小。
解决办法
全局声明项目为ESM模式
在项目根目录的package.json中添加"type": "module":{ "type": "module", "devDependencies": { "example-package": "^1", "vite": "^6" } }单独指定配置文件为ESM
若不想全局修改项目模块类型,可将vite.config.js重命名为vite.config.mjs,Node.js会直接以ESM模式加载该文件。
内容的提问来源于stack exchange,提问作者rozsazoltan

