在之前的文章中,我们已经深入剖析了微前端究竟是什么,可以带来什么收益,现在让我们复习一下微前端的概念:
Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently.
中文释义:
可以由多个团队独立开发的现代web应用程序的技术、策略和方案。
本文则是在此基础上对现有的微前端解决方案进行对比总结,废话少说,让我们开始今天的课题。
查找了大量的资料后,我总结了以下主流的能够真正实现微前端概念的解决方案,如有遗漏,欢迎小伙伴们补充~
众所周知,iframe是html提供的标签,能加载其他web应用的内容,并且它能兼容所有的浏览器,因此,你可以用它来加载任何你想要加载的web应用。
iframe
html
iframe最大的特性就是提供了浏览器原生的硬隔离方案,不论是样式隔离、js 隔离这类问题统统都能被完美解决。读到这时,相信小伙伴们跟我一样,觉得iframe与微前端概念中提到的独立开发、独立维护、相互隔离非常的吻合,有种直接上ifame就完事儿了的想法,但为何它到现在也不是微前端主要的实现方式呢,后来有幸拜读了qiankun技术圆桌中一篇关于微前端Why Not Iframe的思考,总结的很到位,现复述其中的一段描述
独立开发
独立维护
相互隔离
qiankun技术圆桌
iframe虽然基本能做到微前端所要做的所有事情,但它的最大问题也在于他的隔离性无法被突破,导致应用间上下文无法被共享,随之带来开发体验、产品体验的问题。
以下是我对该文中总结部分的总结:
经过以上思考,我个人也有了一些拓展总结:
我猜,以上原因便是iframe没能作为官方微前端方案的原因吧。
或许很多小伙伴对Web Components不是很了解,它是由google推出的浏览器的原生组件,MDN对Web Components的定义是这样的:
Web Components
google
MDN
作为开发者,我们都知道尽可能多的重用代码是一个好主意。这对于自定义标记结构来说通常不是那么容易 — 想想复杂的HTML(以及相关的样式和脚本),有时您不得不写代码来呈现自定义UI控件,并且如果您不小心的话,多次使用它们会使您的页面变得一团糟。 Web Components旨在解决这些问题 — 它由三项主要技术组成,它们可以一起使用来创建封装功能的定制元素,可以在你喜欢的任何地方重用,不必担心代码冲突。
它的三项主要技术是指:
<template>
<slot>
通过以上描述,再结合微前端的概念,我们来看看Web Components是如何做到微前端:
Shadow DOM
综上所述,Web Components是有能力以组件加载的方式将微应用整合在一起作为微前端的一种手段,但不幸的是,Web Components是浏览器的新特性,所以它的兼容性不是很好,如果有兼容性要求的项目还是无法使用,具体请查看can i use。
ESM是ES Module的缩写,是Ecma script 2015中提出的一种前端模块化手段,那么,它又是如何做到微前端的呢?其实,微前端无外乎三大特性,无技术栈限制、应用单独开发,多应用整合,只要抓住了这三个特性,那就不难理解ESM如何做的了:
ESM
ES Module
Ecma script 2015
无技术栈限制
应用单独开发
多应用整合
cdn
ESM是能做到微前端的核心思想,但是它也存在着兼容性这一大弊端,尽管ESM已经很优秀了,但是大部分老版的浏览器仍然无法直接使用,这也是babel等编译工具出现的原因,幸运的是,他可以通过webpack、rollup、esbuild、snowpack等编译工具成为兼容性的代码。
webpack
rollup
esbuild
snowpack
在微前端界,qiankun算得上是最早成型且知名度最广的框架了,它是真正意义上的单页微前端框架,那么qiankun到底有哪些特点呢,在其官网中我找到了如下概括:
qiankun
single-spa
除了最后一点拓展以外,微前端想要达到的效果都已经达到。
EMP是由欢聚时代业务中台自主研发的最年轻的单页微前端解决方案 那么,他有哪些特性呢,下面我们一起看看:
Webpack5
Module Federation
EMP
cerate-react-app
create-vue-app
emp-cli
细心的小伙伴应该发现,EMP除了具备微前端的能力外,还实现了跨应用状态共享、跨框架组件调用的能力,这是现有框架所不具备的优秀特性!
又到了下课的最后五分钟时间,一起来看看今天的分享都有哪些关键的知识需要掌握:
iframe可以直接加载其他应用,但无法做到单页导致许多功能无法正常在主应用中展示。
web Components及ESM是浏览器提供给开发者的能力,能在单页中实现微前端,不过后者需要做好代码隔离,并且他们都是浏览器的新特性,都存在兼容性问题,微前端方面的探索也不成熟,只能作为面向未来的微前端手段。
web Components
qiankun基本上可以称为单页版的iframe,具有沙箱隔离及资源预加载的特点,几乎无可挑剔。但可能存在以下几点不足:
EMP作为最年轻微前端解决方案,也是吸收了许多web优秀特性才诞生的,它在实现微前端的基础上,扩充了跨应用状态共享、跨框架组件调用、远程拉取ts声明文件、动态更新微应用等能力。同时,细心的小伙伴应该已经发现,EMP能做到第三方依赖的共享,使代码尽可能地重复利用,减少加载的内容。
以下表格为各解决方案的总结:
分享到此结束,对EMP微前端方案感兴趣的话,可以从这里学习到更多内容:
基础知识解析
什么是微前端
对比多种微前端方案
webpack5 module Federation原理学习
EMP的设计架构
快速入门
react项目如何使用和接入EMP
vue项目如何使用和接入EMP
辅助插件的使用教程
进阶教程
Vue和React项目如何互相远程调用
cocos2d 项目如何使用和接入EMP
教你基站搭建技巧
原文:https://www.cnblogs.com/BoatGina/p/14028597.html