导航


HTML

CSS

JavaScript

浏览器 & 网络

版本管理

框架

构建工具

TypeScript

性能优化

软实力

算法

UI、组件库

Node

冷门技能

什么是微前端

随着业务的复杂程度越来越高,我们的项目也变的越来越大,越来越臃肿,达到一定程度以后,如果后期想要重构,那将是灾难级别的。而且技术随着不断的更新,以前的老项目使用的老旧的技术栈,项目更新新技术就只能从新开一个项目。

那么如何解决这样的问题呢?答案就是微前端。 那什么是微前端呢?

举个例子,我们有一个管理系统,里面有各种模块。我们可以按照业务拆分为多个系统进行开发。我们可以有一个主应用,然后把多个系统当成是子应用,独立开发,独立测试,独立部署,最后所有的子应用就承载到主应用上。

Untitled

假设我们的主应用部署到 https://main.app.com,有两个子应用分别部署到

那么在主应用中打开子应用是如何访问的呢?如这样的:

这样我们的三个应用都集中到了一个应用上,大家各自开发自己负责的项目,各自测试、部署自己的项目。

微前端如何加载子应用的呢?

flowchart LR
	
		用户输入url --> 访问域名下的index.html --> 加载主应用 --> 监听路由的变化 --> 匹配子应用路由 --> 加载子应用

需要先加载基座(主应用),再把选择权交给主应用,由主应用根据注册过的子应用来抉择加载谁,当子应用加载成功后,再由vue-router或react-router来根据路由渲染组件。

微前端的核心价值

微前端架构具备以下几个核心价值:

微前端架构旨在解决单体应用在一个相对长的时间跨度下,由于参与的人员、团队的增多、变迁,从一个普通应用演变成一个巨石应用。

主流微前端方案

解决方案 相对特点 缺点
iframe 天生隔离样式与脚本、多页 1. 不是单页应用,会导致浏览器刷新 iframe url 状态丢失、后退前进按钮无法使用
  1. 弹框类的功能无法应用到整个大应用中,只能在对应的窗口内展示
  2. 由于可能应用间不是在相同的域内,主应用的 cookie 要透传到根域名都不同的子应用中才能实现免登录效果
  3. 每次子应用进入都是一次浏览器上下文重建、资源重新加载的过程,占用大量资源的同时也在极大地消耗资源
  4. iframe的特性导致搜索引擎无法获取到其中的内容,进而无法实现应用的seo | | Web Components | 天生隔离样式与脚本 | 无法兼容所有浏览器 | | ESM | 远程加载模块 | 1. 无法兼容所有浏览器(但可以通过编译工具解决)
  5. 需手动隔离样式(可通过css module解决) | | qiankun | 1. HTML Entry 接入方式
  6. 资源预加载 | - | | EMP | 1. 每个微应用独立部署运行
  7. 动态更新微应用
  8. 去中心化
  9. 跨技术栈组件式调用
  10. 按需加载
  11. 应用间通信
  12. 生成对应技术栈模板
  13. 远程拉取ts声明文件 | 目前无法涵盖所有框架 |

文章来源