共享依赖版本管理
Module Federation 共享依赖需要正确管理版本,避免版本冲突。
版本冲突问题
JavaScript
主应用: vue@3.2.0
子应用A: vue@3.1.0
子应用B: vue@3.3.0
→ 运行时使用哪个版本?
共享配置
JavaScript
federation({
shared: {
vue: {
singleton: true, # 单例模式
requiredVersion: '^3.0.0', # 最低版本要求
strictVersion: false # 是否严格版本
}
}
})
共享配置选项
| 选项 | 说明 | |
|---|---|---|
| singleton | 强制使用单例 | |
| requiredVersion | 最低版本要求 | |
| strictVersion | 严格版本匹配 | |
| eager | 提前加载 | |
| version | 当前版本 |
注意:singleton 确保运行时只有一个 vue 实例。
singleton 单例模式
JavaScript
shared: {
vue: {
singleton: true # 主应用和子应用共享同一 vue
}
}
单例模式下:
- 所有应用使用同一 vue 实例
- 避免组件不兼容问题
- 减少内存占用
版本检查
JavaScript
shared: {
vue: {
requiredVersion: '^3.2.0',
strictVersion: true # 严格版本检查
}
}
strictVersion: true 时:
- 版本不匹配会报错
- 确保版本一致
版本降级处理
JavaScript
shared: {
vue: {
singleton: true,
requiredVersion: '^3.0.0',
strictVersion: false # 允许降级
}
}
strictVersion: false 时:
- 主应用版本高,子应用使用主版本
- 主应用版本低,子应用使用自己的版本
eager 提前加载
JavaScript
shared: {
vue: {
eager: true # 提前加载,不等待请求
}
}
eager: true 时:
- vue 在主应用启动时加载
- 避免子应用加载时请求
多依赖共享
text
shared: {
vue: { singleton: true },
'vue-router': { singleton: true },
pinia: { singleton: true },
lodash: { eager: true } # 工具库提前加载
}
版本冲突解决方案
| 方案 | 适用场景 | |
|---|---|---|
| singleton | 核心框架强制单例 | |
| requiredVersion | 指定最低版本 | |
| strictVersion | 确保版本一致 | |
| eager | 关键依赖提前加载 |
要点总结
- singleton 强制共享依赖单例
- requiredVersion 设置最低版本
- strictVersion 控制严格匹配
- eager 提前加载避免延迟
📝 发现内容有误?点击此处直接编辑