微前端应用及基于qiankun的微前端实践

示例代码仓库:
yl-qiankun-base:https://gitee.com/dongche/yl-qiankun-base.git
yl-qiankun-child-vue:https://gitee.com/dongche/yl-qiankun-child-vue.git

微前端概念起源

微前端概念最早其实是借鉴了微服务的概念,最早是出现在2016年的ThoughtWorks Technology Radar(ThoughtWorks技术雷达)

什么是微前端

MicroFrontends 官方解释:用来构建能够让 多个团队 独立交付项目代码的 现代web app 技术,策略以及实践方法
MicroFrontends 官网:https://swearer23.github.io/micro-frontends/
所以微前端并不是一个单纯的技术点,而是一个为了解决复杂应用,特别时便于以后维护的思路和方法。
核心思路:根据功能模块拆解应用,然后根据需求组装,应用之间可通信
特点: 1.模块可以使用不同技术栈
2.应用隔离,各应用可独立部署,可独立运行
3.应用之间松耦合
4.可渐进式迁移

用图做个简单说明:


qiankun 图示.png

扩展理解:组件化的延伸,由项目内的组件化扩展到项目之间的组件化

微前端的应用场景

1.老系统的迭代:复杂的老系统,可能由于各种原因,代码风格不一,代码冗杂,质量参差不齐,然后还要不断加入新功能。
2.复杂应用功能模块的拆分和细化,便于各团队同步进行开发和维护
3.有比较大功能模块需要在不同的项目中使用
4.需求不定,经常有对项目进行拆分和融合
5.平台型应用。方便删减功能模块和外部接入

目前市面上的主流微前端方案及框架

微前端模式

  • 自由组织模式
    没有形式,自由嵌套
  • 基座模式
    有一个父级主应用为容器基座,其他应用需要注册接入
  • 去中心模式
    各应用之间各自为政又可以彼此分享资源,没有基座不存在主次关系

微前端方案

  • iframe 方案

    • 优点:html 提供的标签,天然隔离,任意嵌套,能加载任意web应用。适合自由组织自由嵌套模式,无需配置,简单易用

    缺点:参考qiankun技术圆桌的 Why Not Iframe

    1. url 不同步。浏览器刷新 iframe url 状态丢失、后退前进按钮无法使用。
    2. UI 不同步,DOM 结构不共享。想象一下屏幕右下角 1/4 的 iframe 里来一个带遮罩层的弹框,同时我们要求这个弹框要浏览器居中显示,还要浏览器 resize 时自动居中..
    3. 全局上下文完全隔离,内存变量不共享。iframe 内外系统的通信、数据同步等需求,主应用的 cookie 要透传到根域名都不同的子应用中实现免登效果
    4. 慢。每次子应用进入都是一次浏览器上下文重建、资源重新加载的过程。
  • web Components 方案
    Web Components 是一套 浏览器原生组件,由google发起。
    web Components 三大技术:

    • Custom elements(自定义元素):一组JavaScript API,允许您定义custom elements及其行为,然后可以在您的用户界面中按照需要使用它们。
    • Shadow DOM(影子DOM):一组JavaScript API,用于将封装的“影子”DOM树附加到元素(与主文档DOM分开呈现)并控制其关联的功能。通过这种方式,您可以保持元素的功能私有,这样它们就可以被脚本化和样式化,而不用担心与文档的其他部分发生冲突。
    • HTML templates(HTML模板):