微前端

一 、微前端概念

微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略
核心价值:
1.技术栈无关 主框架不限制接入应用的技术栈,微应用具备完全自主权
2.独立开发、独立部署 微应用仓库独立,前后端可独立开发,部署完成后主框架自动完成同步更新
3.增量升级 在面对各种复杂场景时,我们通常很难对一个已经存在的系统做全量的技术栈升级或重构,而微前端是一种非常好的实施渐进式重构的手段和策略
4.独立运行 每个微应用之间状态隔离,运行时状态不共享

之前微前端的实现方案:iframe
体验
iframe 最大的特性就是提供了浏览器原生的硬隔离方案,不论是样式隔离、js 隔离这类问题统统都能被完美解决。但他的最大问题也在于他的隔离性无法被突破,导致应用间上下文无法被共享,随之带来的开发体验、产品体验的问题。
iframe的问题
父子应用之间通信问题
cookie共享问题(可做单点登陆SSO)
交互视图效果不佳

1、url 不同步。浏览器刷新 iframe url 状态丢失、后退前进按钮无法使用。
2、UI 不同步,DOM 结构不共享。想象一下屏幕右下角 1/4 的 iframe 里来一个带遮罩层的弹框,同时我们要求这个弹框要浏览器居中显示,还要浏览器 resize 时自动居中..
3、全局上下文完全隔离,内存变量不共享。iframe 内外系统的通信、数据同步等需求,主应用的 cookie 要透传到根域名都不同的子应用中实现免登效果。
4、慢。每次子应用进入都是一次浏览器上下文重建、资源重新加载的过程。
5、seo差,获取不到iframe里面的内容导致网站seo排名靠后

二、推荐的几个微前端框架

1.Qiankun

qiankun 是一个基于 single-spa微前端实现库,但已使 single�spa 可用于生产(production-ready)。旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统

1 优点
  • 阿里团队开发维护,文档多。
  • 基于 single-spa 封装,提供了更加开箱即用的 API。
  • 解耦,技术栈无关,任意技术栈的应用均可 使用/接入,不论是 React/Vue/Angular/JQuery 还是其他等框架。
  • HTML Entry 接入方式,让你接入微应用像使用 iframe 一样简单。
  • 样式隔离,确保微应用之间样式互相不干扰。
  • JS 沙箱,确保微应用之间 全局变量/事件 不冲突。
  • 资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度。
  • umi 插件,提供了 @umijs/plugin-qiankun 供 umi 应用一键切换成微前端架构系统。
  • 兼容IE11
2 缺点

1.上线部署文档较少
2.qiankun 只能解决子项目之间的样式相互污染,不能解决子项目的样式污染主项目的样式

3.相关文档

官网:https://qiankun.umijs.org/zh/cookbook
github地址
qiankun 技术圆桌
微前端框架qiankun以及源码

2. Webpack 5 的 Module Federation

Module Federation [ˌfedəˈreɪʃn] 主要是用来解决多个应用之间代码共享的问题,允许 JavaScript 应用程序在运行时从另一个应 用程序动态导入代码。模块将构建唯一的 JavaScript 入口文件,其他应用程 序可以通过设置 Webpack 配置项来下载该入口文件。

它还通过启用依赖关系共享来解决代码依赖关系和包大小增加的问题。例如, 如果你要下载一个 React 组件,那么你的应用程序不会两次导入 React 代 码。模块将自动使用你已有的 React 源,仅额外导入组件代码。

你可以使用 React.lazy 和 React.suspense 提供后备功能,以确保当导入的代码 由于某种原因失败后,不会因构建失败而影响用户体验。
多个单独的构建最后要形成一个应用程序。这些单独的构建不应相互依赖,因
此可以单独开发和部署。

每个项目可以是host也可以是remote,也可以两个都是。

1.优点

1.webpack对于前端开发者比较熟悉,比较容易接受

2.缺点

1.需要你们所有的项目都基于 Webpack,而且已经升级到了 Webpack 5.
2.Webpack 5当前并没有正式加入Module Federation功能,而是在开发分支中加入的,所以需要从git仓库中安装Webpack 5 以及html-webpack-plugin,即

npm install --save-dev git://github.com/webpack/webpack.git#dev-1
npm git://github.com/ScriptedAlchemy/html-webpack-plugin.git#master

3.全部打成一个包,打包时间较慢,据统计,内部云编译平台的平均编译时间在 100s 以上;
4.公共依赖共享,只能是host给remote提供。两个remote之间是不能共享的

3.官网文档

webpack5官网
Webpack5 跨应用代码共享 - Module Federation

3.Piral

Piral 所要求的前提条件相当宽松,开发人员仅需要安装喜欢的编辑器、终端、
网络浏览器和 Node.js 即可。开发者可以在本地开发机的仿真器中执行和调
试 Piral instance(应用程序外壳)和 piltes(功能模块)。
特点:
1、高度模块化
2、多框架兼容
3、支持资源文件的拆分
4、全局状态管理
5、独立开发和部署
6、CLI工具

1.优点

translations 翻译 Bundle Splitting 模块划分 Multi Framework 多框架 Main Framework 主框架 Modal manager 模态管理器 live Data Feed 实时数据推送
standards-Driven 标准驱动 free deployments 免费部署 free development 免费开发 form Management 表单管理 search providers 搜索提供程序 global state全局状态 notifications 通知 module Communication 模块通信 stitching location运行位置


与同类框架的比较
2.缺点

文档太少,官网只有英文版

3.相关文档

官网:https://docs.piral.io/guidelines/tutorials/01-introduction
github

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • iframe iframe 是 html 提供的标签,能加载其他web应用的内容,并且它能兼容所有的浏览器,因此,...
    Moon_f3e1阅读 2,077评论 0 0
  • 一、什么是微前端 Techniques, strategies and recipes for building ...
    梅西爱骑车阅读 2,996评论 0 15
  • 什么是微前端 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略. 微前...
    lean_阅读 2,416评论 0 7
  • 微前端是一种类似于后端微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为多个小...
    空无一码阅读 461评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 120,514评论 2 7