# 7.微前端

# 1.Webpack5的模块联邦实现原理

  • 允许一个 JS 应用动态地从另一个应用加载代码,而不需要将这些代码打包在一起。模块联邦主要用于微前端架构,使得不同团队可以独立开发和部署应用的不同部分。

# 1.模块联邦的基本原理

主应用远程动态加载子应用的内容,子应用暴露出要给主应用加载的模块。

模块联邦在内部通过自定义容器来处理每个不同的模块。

容器引用(Container Reference)作为宿主(host),调度容器并异步地暴露模块。

  • 模块联邦的核心概念是允许一个 Webpack 构建的应用(称为主机)动态地从另一个应用(称为远程)加载模块。

  • 1.远程模块:在远程应用中,某些模块被标记为可供其他应用使用。这是通过 Webpack 配置中的 ModuleFederationPlugin 实现的,其中定义了哪些模块是暴露给外部使用的。

  • 2.动态加载:主机应用可以通过动态导入(如 import())从远程应用加载这些暴露的模块。这个过程是异步的,允许应用在运行时按需加载代码。

  • 3.共享模块:模块联邦还允许多个应用共享依赖库,避免重复加载相同的库代码。这通过配置共享模块来实现。

# 2.工作流程

  • 1.配置远程应用:在远程应用的 Webpack 配置中,使用 ModuleFederationPlugin 定义暴露的模块和共享的库。

  • 2.配置主机应用:在主机应用的 Webpack 配置中,同样使用 ModuleFederationPlugin,指定它将从哪个远程应用中加载模块。

  • 3.运行时加载:主机应用在运行时,根据需要从远程应用动态加载模块。Webpack 会处理从远程应用加载模块的细节,包括网络请求和模块初始化。

  • 4.共享依赖:如果主机和远程应用共享一些依赖,Webpack 会尽量确保这些依赖只加载一次,即使它们被多个应用使用。

# 3.优点

  • 1.独立部署:模块联邦允许不同团队独立开发和部署应用的不同部分,提高了开发效率和部署灵活性。

  • 2.减少代码重复:通过共享依赖,减少了代码冗余和加载时间。

  • 3.灵活的微前端架构:使得微前端架构的实现更加灵活和高效。