当我们在Vite 项目中尝试导入 Immer 库时遇到了 ES 模块导出问题,问题的原因:
- Immer 从 v9 开始使用纯 ESM 格式(没有默认导出)
- Vite 期望 ESM 模块但遇到了兼容性问题
- 你的代码可能使用了 import immer from 'immer' 这种旧语法
解决方案
方案 1:更新导入语法(推荐)
使用下面方式导入
import { produce } from 'immer';
然后更新所有使用下面的方式:
return produce(state, draft => {
// 你的reducer逻辑
});
方案 2:配置 Vite 兼容
在 vite.config.ts
中添加如下脚本:
export default defineConfig({
optimizeDeps: {
include: ['immer'],
esbuildOptions: {
format: 'esm'
}
}
})
方案 3:使用命名空间导入
import * as immer from 'immer';
// 使用
immer.produce(...)