redux-toolkit启动渲染报immer相关TypeError非函数错误如何修复
报错根因
该错误由@reduxjs/toolkit与加载到的immer实例版本不兼容触发:
- 项目中手动安装了不兼容的
immer版本(如v10+,该版本已移除enableES5导出,且调整了导出结构),与@reduxjs/toolkit依赖的immer大版本不匹配 - 包管理器依赖提升逻辑异常,导致
@reduxjs/toolkit加载到了错误版本的immer - 禁止直接修改node_modules下的第三方依赖源码:改动会在下次依赖安装时被覆盖,还会造成团队开发环境不一致,属于不可持续的临时方案。
修复方案
按优先级依次尝试:
- 移除手动安装的冗余immer依赖
@reduxjs/toolkit已经内置了对应兼容版本的immer,不需要额外单独安装。执行对应包管理器的命令移除手动安装的immer后重装依赖:
如果业务代码确实需要单独调用immer的API,安装与当前# npm npm uninstall immer && npm install # yarn yarn remove immer && yarn install # pnpm pnpm remove immer && pnpm install@reduxjs/toolkit版本匹配的immer版本即可,比如RTK 1.x系列对应immer 9.x版本,不要安装v10及以上版本。 - 全量清理依赖缓存重装
如果移除冗余依赖后仍报错,是本地依赖缓存或残留文件导致,全量删除依赖目录和锁文件后重装:# 删除依赖目录和对应锁文件 rm -rf node_modules package-lock.json yarn.lock pnpm-lock.yaml # 按自己用的包管理器执行装包 npm install # 或 yarn install # 或 pnpm install - 强制锁定全局immer版本
针对monorepo项目或包管理器依赖提升持续异常的场景,可以通过配置强制项目内所有依赖引用的immer统一为兼容版本:
yarn/pnpm用户在package.json中添加:
npm用户在{ "resolutions": { "immer": "^9.0.21" } }package.json中添加:
添加完成后重新执行依赖安装命令即可生效。{ "overrides": { "immer": "^9.0.21" } }
内容的提问来源于stack exchange,提问作者Dmitry Kustarnikov
相关产品推荐
相关产品推荐

