Vite模块联邦共享Zustand时出现create不是函数的问题
问题分析与解决
错误原因
这个create is not a function错误本质是模块联邦共享依赖不一致导致的:远程应用(core)的useUser钩子依赖zustand的create函数,但宿主应用(host)没正确共享zustand和immer,导致在宿主环境中加载的create不是预期的函数,甚至出现多实例冲突。
解决步骤
1. 同步宿主与远程的共享依赖配置
修改宿主应用的模块联邦配置,把zustand和immer加入共享列表,并开启singleton模式(确保全局只有一个依赖实例):
federation({ name: 'host', filename: 'remoteEntry.js', remotes: { core: 'http://localhost:8001/dist/assets/remoteEntry.js', }, exposes: {}, shared: { 'react': { singleton: true }, 'react-dom': { singleton: true }, 'zustand': { singleton: true }, 'immer': { singleton: true } }, }),
2. 确保依赖版本完全一致
检查远程和宿主应用的package.json,保证zustand和immer的版本完全相同。比如两边都用zustand@4.4.7和immer@10.0.3,版本不匹配会导致导出的函数结构差异,引发类型错误。
3. 验证远程应用的导入正确性
确认远程应用的Store.ts中,create和produce的导入路径正确:
import { create } from 'zustand'; import { produce } from 'immer';
如果导入了错误的模块(比如自定义的create函数),也会导致该错误。
4. 清理缓存并重新构建
分别在两个应用中执行以下操作,清理旧的依赖和构建缓存:
- 删除
node_modules和锁文件(package-lock.json/yarn.lock/pnpm-lock.yaml) - 重新安装依赖:
npm install(或对应包管理命令) - 重新构建远程应用并重启两个应用的开发服务
内容的提问来源于stack exchange,提问作者user3074140
相关产品推荐
相关产品推荐

