本文将讲解微前端诞生的背景,详细讲解微前端这个概念的由来及其深入理解.看完这篇文章,相信你对微前端有了更全面的了解,明白它能为你的团队乃至整个企业解决什么问题,能带来什么样的收益。1.背景目前很多企业基本实现应用代码物理隔离,实现单应用单库,闭环部署更新测试环境、预发布环境、正式环境。因此,我们讨论的是如何实现基于不同应用、不同库的多个应用之间的资源共享和独立部署?之前更多的处理方式是通过npm包的形式进行抽取和引用,比如多个应用项目之间,可能存在某个业务逻辑模块或者其他可复用的模块,以npm包的形式进行抽取和管理和使用。但这带来了以下问题:发布效率低下。如果需要迭代npm包中的逻辑业务,需要先发布npm包,然后为每一个使用该npm包的应用更新npm包的版本,然后构建并发布每一个应用。这个过程很麻烦。如果涉及更多的应用程序,将花费更多的人力和精力。多团队协作容易不规律。包含公共模块的npm包充当共享资产,“每个人”都拥有它,但实际上这通常意味着没有人拥有它。如果没有明确的合同或技术愿景,它很快就会因风格不一致的代码而变得混乱。这些问题让我们意识到,扩展前端开发以便多个团队可以同时开发一个大型复杂的产品是一个重要但困难的问题。因此,早在2016年,微前端的概念就诞生了。2.微前端的概念微前端官网定义了微前端的概念:Techniques,strategiesandrecipesforbuildingamodernwebappwithmultipleteamsthatcanshippingfeaturesindependently。翻译成中文:从MicroFrontends官网可以了解到,微前端的概念是微服务概念的扩展,它摒弃了大规模的单体式做法,将前端作为一个整体分解为小而简单的块。这些块可以独立开发、测试和部署,同时仍然聚合成一个产品呈现在客户面前。可以理解为,微前端是一种架构风格,将多个可以独立交付的小前端应用聚合成一个整体。需要注意的几点:微前端不是一种具体的技术,而是一种技术、策略和方法的集成,可以通过脚手架、辅助插件、规范约束等形式表现出来。它是一个宏观架构。这种架构目前有很多解决方案,各有优缺点,但只要方案适用于当前的业务场景,就是一个好的方案。微前端没有技术堆栈的限制。每套微前端方案的设计都是根据实际需求来设计的。如果多个团队统一使用react技术栈,可能对微前端方案的跨技术栈没有要求;如果多个团队同时使用react和vue技术栈,可能对微前端方案的跨技术栈要求比较高。3、微前端同步更新相对于npm包提取方式的优势,让我们体会到更新流程和效率的重要性。由于微前端是多个子应用的聚合,如果多个业务应用依赖同一个服务应用的功能模块,只需要更新服务应用,其他业务应用可以立即更新,从而缩短更新过程,节省更新成本。增量升级由于历史的包袱,一些团队还在沿用陈旧庞大的前端单体模型,受制于技术栈陈旧或仓促完成的代码质量。程度严重到让人想要推翻重写。为避免完全重写的风险,我们更愿意逐步改造旧应用程序,同时继续为我们的客户提供新功能而不会产生影响。微前端让我们可以更自由的对产品的每一部分进行独立决策,让团队不断的增加新的特性,对原有的整体做很少的修改,让我们的架构、依赖、用户体验都保持一致.增量升级的能力。另外,如果主框架出现不兼容的重大更新,各个微前端都可以选择适时更新,而不是被迫立即暂停当前的开发和更新。如果我们要尝试新技术,或者新的交互方式,对整体的影响会小一些。简单、解耦的代码库每个单独的微前端项目的源代码库会比单个前端项目的源代码库小很多。这些小型代码库将更易于开发。更值得注意的是,我们避免了无关组件之间无意的过度耦合。通过加强应用程序的边界来减少此类意外耦合的发生。当然,独立的、高级的架构方法(例如微前端)不会被用来取代组织良好、干净的旧代码。我们并不是要逃避代码优化和代码质量改进。相反,我们更难做出错误的决定并增加做出正确决定的可能性,从而使我们陷入成功的陷阱。例如,我们使跨边界共享领域模型变得困难,因此开发人员不太可能这样做。同样,微前端迫使您明确和深思熟虑如何在应用程序的不同部分之间传递数据和事件,这是我们很久以前就应该开始做的事情!独立部署像微服务一样,微前端是独立可扩展的。可部署性是关键。它缩小了部署范围,从而降低了相关风险。无论您的前端代码托管在哪里,每个微前端都应该有自己的持续交付渠道,用于构建、测试和部署它,一直到生产。我们应该能够在不考虑其他代码库或渠道的情况下部署每个微服务。即使原来的单个项目固定下来,按季度手动发布,或者其他团队向自己的主分支提交未完成或有问题的代码,也不会影响当前项目。如果一个微前端项目是生产就绪的,它应该具有这种能力,并且决定权在于构建和维护它的团队。一个自治的团队将我们的代码库和发布周期分开的更高阶的好处是,我们有一个完全独立的团队,可以参与我们自己产品的概念、生产和后续过程。每个团队都拥有为客户提供价值所需的所有资源,使他们能够快速有效地采取行动。为了做到这一点,我们的团队需要按照业务职能垂直划分,而不是按照技术类别划分。一种简单的方法是根据最终用户将看到的内容对产品进行细分,因此每个微前端都封装了应用程序的单个页面,并由一个团队单独拥有。与围绕技术类别或“横向”问题(如样式、表单或验证)分组团队相比,这允许更有凝聚力的团队合作。4.微前端解决方案类型目前国内的微前端解决方案大致分为:基础模式:通过构建基础和配置中心来管理子应用。比如在SingleSpa的通用乾坤方案的基础上,也有根据自己团队的业务量身定制的方案。自组织模式:通过协议进行互调,但是会遇到处理第三方依赖等问题。去中心化模式:脱离基座模式,各个应用可以相互共享资源。例如基于Webpack5ModuleFederation的EMP微前端方案,可以实现多个应用之间的资源共享。其中去中心化模式下的EMP微前端方案目前值得关注。不仅可以实现跨技术栈调用,还可以深度定制同一技术栈应用之间的共享资源。如果你刚刚开始研究微前端,你可以先尝试了解它们。一起来看看EMP微前端方案,或许能给你带来不错的体验。
