本指南介绍了如何将模块联邦(Module Federation)与 Angular CLI 集成。使用 @angular-architects/module-federation
插件来协助完成这一集成。
@angular-architects/module-federation
插件。你需要在构建阶段配置 Angular CLI 以使用模块联邦。 为了充分发挥模块联邦的潜力,需要一个自定义构建器。
@angular-architects/module-federation
包提供了这个自定义构建器。
使用 ng add
命令将它整合到你的项目中:
在版本 14.3 中引入的 --type
参数确保只生成必要的配置。
Shell(消费者)对于模块联邦(Module Federation)集成至关重要。
本节配置了支持通过路由来懒加载 FlightModule
的 Shell。
首先定义应用程序的路由,使用虚拟路径指定懒加载的 FlightModule
:
在这个配置中,路径 'mfe1/Module'
是一个虚拟表示,表明它在 Shell 应用程序中并不实际存在。相反,它是对另一个独立项目中的模块的引用。
为虚拟路径创建一个类型定义:
这有助于 TypeScript 编译器理解虚拟路径。
配置 Webpack 将所有前缀为 mfe1
的路径解析为一个远程项目。这是在 webpack.config.js
文件中完成的:
在开发中,直接硬编码远程入口的 URL 就足够了。然而,对于生产环境,需要采用动态方法。动态远程 的概念在专门的文档页面“动态远程”中进一步探讨。
shared
属性指定了 Shell 和微前端(们)之间要共享的 npm 包。使用 shareAll
辅助方法,可以共享 package.json
中列出的所有依赖。这虽然便于快速设置,但可能导致共享依赖过多,这可能会对优化造成影响。singleton: true
和 strictVersion: true
的组合设置指示,如果 Shell 和微前端(们)之间存在版本不匹配,Webpack 将抛出运行时错误。将 strictVersion
更改为 false
将改为运行时警告。requiredVersion: 'auto'
选项,由 @angular-architects/module-federation
插件提供,可以自动从 package.json
确定版本,有助于防止与版本相关的问题。生产者,也称为模块联邦中的远程模块,其结构类似于标准的 Angular 应用。它在 AppModule
中有特定的路由,并且有一个用于航班相关任务的 FlightsModule
。本节解释了如何将 FlightsModule
平滑地加载到 Shell(宿主)中。