微前端是什么

微前端是一种架构,将微服务的理念应用与浏览器端。 一个微前端应用由多个小型前端应用组合在一起的应用, 每个小型应用可以单独的开发、单独运行、单独部署。微前端是一种架构体系,并不局限于应用所使用的技术栈

解决了什么问题

单页面应用是项目开发的形态之一,但是随着时间的推移及应用功能的复杂度,单页面应用变得越来越庞大,并且难以维护,所以微前端在此的意义就是将庞大的应用进行拆分,随之解藕,每个模块单独的进行维护和部署,提升效率

在一些历史应用中,这些项目大多用的老框架,想要升级到现在技术栈需要的时间和精力很多,还不能抛弃,微前端可以将这些系统整合,在基本不修改逻辑的同时,兼容新老两套系统并行运行。

不限技术栈,不管使用的框架还是原生js写的应用,都可以集成到微前端中来。

技术栈升级,循序渐进的对应用模块逐渐升级,不影响其他模块的正常工作

在浏览器平台如何使用

微前端实现方案:

方案 实现描述 优点 缺点
nginx路由转发 通过nginx配置代理,根据不同的url映射到不同的应用
1. 实现简单
1. 不需要对现有应用进行改造
1. 无关技术栈

1. 每次切换应用时浏览器都需要重新加载页面
1. 多个字应用无法并存
1. 通信困难,状态无法共享,页面状态无法保留
iframe 内嵌式,可以狠方便的将一个应用嵌入到另一个应用中
1. 实现简单
1. css和js天然隔离
1. 无关技术栈, 不需要改造现有应用

1. 每次需要重新加载页面
1. UI不同步,DOM结构不共享,页面状态不保留
1. 全局上下文完全隔离,切换子应用时可能需要重新登录
1. 数据同步只能通过messageChannel
web components 每个子应用采用web components技术编写组件,是一套全新的开发模式,由于template、shadow dom的天然隔离,是最原始的实现,很大一部分模版代码可以在js中编写,加载时只需要执行js即可
1. 每个子应用可以天然的隔离css
1. 天然的隔离机制,模版和Element构建

1. js没有隔离,全局使用一个上下文,但是可以采用沙箱机制来做限制
1. 个应用之间通信比较复杂,或每个子应用单独注册,或者依赖于messageChannel
组合式应用路由分发 每个子应用单独构建、部署,运行时由基座应用进行路由管理,应用加载、卸载、事件通信的调度
1. 纯前端改造,体验良好
1. 可无感知切换, 由于自己实现的隔离机制,子应用js、css相互隔离

1. 需要设计和开发,由于存活的应用同时存在一个作用域,需要自己实现隔离,变量污染,通信机制等要点
webpack5: module federation 基于webpack5提供的一个新特性,模块联邦可以在一个js应用中动态加载并运行另一个js应用代码,并实现应用之间的依赖共享
1. 不需要对原有应用进行改造,只需要改动webpack配置文件
1. 需要重新加载页面
1. 多个子应用并存
1. 无关技术栈
1. 首次启动无需加载于本身应用无关的资源

1. 只能依赖于webpack5
1. 对老项目不太行,webpakc改造困难