Metro
Metro 模块联邦(Module Federation)为 React Native 移动开发带来了分布式架构的能力。
概述
React Native 的模块联邦实现使用了自定义的 Metro 打包器集成,能够实现:
- 微前端架构 —— 在 React Native 应用中实现微前端
- 代码共享 —— 在多个 React Native 应用之间共享代码
- 独立部署 —— 各个应用模块可以独立部署
- 运行时模块加载 —— 支持动态更新
注意:Metro 打包器的模块联邦支持仍处于实验阶段,可能缺少部分功能或集成。依赖自定义 Metro 配置的项目或库目前尚不支持,可能无法正常工作。
包
React Native 模块联邦生态系统由以下几个包组成:
@module-federation/metro- 与 Metro 的核心集成,用于启用模块联邦@module-federation/metro-plugin-rnc-cli- React Native CLI 集成@module-federation/metro-plugin-rnef- React Native Enterprise Framework 集成
安装
在 React Native 项目中安装所需的包(使用你喜欢的包管理器):
配置
使用 withModuleFederation 包装你的 Metro 配置以启用模块联邦。
你需要在所有联邦模块(宿主应用和子应用)的 Metro 配置中使用该方法。
应用异步边界设置
使用 withAsyncStartup 包装主 App 组件以启用模块联邦运行时。
这会创建一个异步边界,确保在渲染应用组件之前正确初始化模块联邦运行时。
withAsyncStartup 的作用:
- 在渲染应用前等待模块联邦运行时初始化
- 使用 React Suspense 处理异步加载
- 可选地接受一个备用组件,在初始化期间显示
使用模式
宿主应用
宿主应用从其他应用中消费远程模块:
远程应用(子应用)
远程应用暴露模块供宿主应用使用:
CLI 命令
React Native CLI 集成提供了额外的命令来打包联邦应用:
打包宿主应用
打包消费远程模块的宿主应用:
打包远程应用
打包暴露模块的远程应用(子应用):
这些命令支持与标准 react-native bundle 命令相同的所有选项。
注意:这些命令由
@module-federation/metro-plugin-rnc-cli包提供。
React Native Enterprise Framework (RNEF) 集成
如果项目使用 React Native Enterprise Framework (RNEF),请在 rnef.config.mjs 中添加模块联邦插件:
API 参考
withModuleFederation(metroConfig, federationConfig, options?)
包装 Metro 配置以启用模块联邦。
参数
metroConfig(MetroConfig) - 现有的 Metro 配置federationConfig(FederationConfig) - 模块联邦配置options(Options) - 可选配置,用于实验性功能
FederationConfig 接口
SharedConfig 接口
示例与最佳实践
配置遵循标准的 模块联邦配置格式。
关于模块联邦的概念、配置选项和使用模式的完整信息,请参考官方 模块联邦文档。
要查看可运行的示例和详细实现指南,请访问 Module Federation Metro 仓库,其中包含多个示例应用,展示了不同的使用模式和集成方式。