首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >你想要的【微前端】都在这里了!

你想要的【微前端】都在这里了!

作者头像
京东技术
发布于 2023-08-22 07:25:05
发布于 2023-08-22 07:25:05
67000
代码可运行
举报
文章被收录于专栏:京东技术京东技术
运行总次数:0
代码可运行

Tech 导读 如果你不知道微前端是什么,或者不知道微前端能解决什么问题,那么你可能不需要微前端。 本文认为,对于每一个没有使用过的新技术,都应该有以下几个过程: 1、调研该技术,产出相应的调研文档。 2、输出技术Demo,基本的框架结构。 3、试着在项目中使用它,这一步坑会很多。 4、把它推动到线上完成真正的技术升级。

01

调研微前端

在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了!

1.1 业务背景

某次遇到一个从0到1的大型项目,该项目涉及两个端,除了鉴权和部分业务逻辑不同外,页面UI和其余逻辑几乎一致,遇到这种项目,该如何架构?既能保证项目顺利开发完成,又能保证后期的迭代、维护、可扩展?

1.2 初步方案

首先,想到的技术方案有这么两种:

1、复用同一套代码,通过判断不同的权限,服务端下发标识,处理异同的业务逻辑。

2、开发两套代码,两套鉴权各走各的,页面相同部分从左边Copy到右边。

其次,回过头来想了想,这两种方案都有缺陷:

1、复用同一套代码,后期迭代的过程中,业务差异越来越大的时候,就会形成“屎山”。

2、开发两套代码,后期迭代的过程中,如果业务依然高度相似,那么每次都要把A项目中的代码Copy到B项目中;如果业务逐渐有了各自的风格,那么两套代码的方案显然是更佳的。

最后,除此之外,还有别的更好的方案吗?

1.3 什么是微前端?

微前端的概念是由 ThoughtWorks在2016年提出的,它是一种前端架构风格,将一个庞大的前端应用拆分成多个独立灵活的小型应用,每个应用都可以独立开发、独立运行、独立部署,再将这些小型应用融合为一个完整的应用,或者将原本运行已久、没有关联的几个应用融合为一个应用。微前端既可以将多个项目融合为一,又可以减少项目之间的耦合,提高开发效率和可维护性。微前端的核心在于解耦,通过拆分和集成来实现前端应用的可扩展性和灵活性。

图1.微前端示意图,来源于micro-app官网

02

初识微前端

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

2.1 微前端能力

1、独立开发:微前端可以将一个庞大的前端应用拆分成多个小型应用,每个应用都可以独立开发,不会影响其他应用的开发进度。

2、独立部署:每个小型应用都可以独立部署,不会影响其他应用的部署进度。这也意味着可以使用不同的技术栈、不同的部署方式、不同的版本控制工具等。

3、独立运行:每个小型应用都可以独立运行,不会影响其他应用的运行状态。这也意味着可以使用不同的框架、不同的库、不同的语言等。

4、集成灵活:微前端框架可以将多个小型应用集成为一个完整的前端应用,或者将原本运行已久、没有关联的几个应用融合为一个应用。这也意味着可以根据需要动态地增加或删除应用。

5、解耦:微前端可以将前端应用拆分成多个小型应用,每个应用都有自己的职责和业务逻辑,可以减少应用之间的耦合,提高可维护性和可扩展性。

6、增量升级:微前端可以实现增量升级,只需要升级需要更新的小型应用,而不需要升级整个前端应用。这可以减少升级带来的风险和成本。

2.2 微前端核心

1、拆分:将前端应用拆分成多个小型应用,每个应用都有自己的职责和业务逻辑。这样可以减少应用之间的耦合,使得每个应用都可以独立开发、独立部署和独立运行。

2、集成:通过微前端框架将多个小型应用集成为一个完整的前端应用。这样可以根据需要动态地增加或删除应用,实现灵活的集成。

3、通信:通过定义接口和事件等方式,实现小型应用之间的通信。这样可以保证各个应用之间的协作和交互,同时又不会影响应用之间的耦合。

4、样式隔离:通过使用样式隔离技术,使得每个小型应用都可以使用自己的样式,不会影响其他应用的样式。这样可以保证各个应用之间的样式不会互相干扰,同时又不会影响应用之间的耦合。

总之,微前端的核心是解耦,通过拆分、集成、通信和样式隔离等方式,实现前端应用的解耦,提高可维护性和可扩展性。

2.3 微前端平台

1、single-spa是一个将多个单页面应用聚合为一个整体应用的 JavaScript 微前端框架。

2、qiankun 蚂蚁金服出品,基于 single-spa 封装的微前端框架。

3、MicroApp 京东出品,一款基于WebComponent的思想,轻量、高效、功能强大的微前端框架。

由于项目使用的 umi + react +ts 的技术栈,而 qiankun 天生就集成在 umi 框架中了,只需要一些配置就可以使用微前端技术,注意,这里所说的是一些配置,就是这一些配置,使本次项目使用中放弃了 qiankun 微前端框架,因为 single-spa 要求子应用修改渲染逻辑并暴露出三个方法:bootstrap、mount、unmount,分别对应初始化、渲染和卸载,这也导致子应用需要对入口文件进行修改。而 qiankun 是基于single-spa进行封装,所以这些特点也被 qiankun 继承下来,并且需要对 webpack 配置进行一些修改,成本相对较高。

再来看 micro-app 老东家出品的微前端框架,借鉴了 WebComponent 的思想,通过 CustomElement 结合自定义的 ShadowDom,将微前端封装成一个类WebComponent 组件,从而实现微前端的组件化渲染。并且由于自定义ShadowDom的隔离特性,micro-app不需要像single-spa和qiankun一样要求子应用修改渲染逻辑并暴露出方法,也不需要修改 webpack 配置,是目前市面上接入微前端成本最低的方案。

图2.micro-app微前端框架,来源于micro-app官网

03

应用微前端

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目标页面展示到屏幕。

3.1 选择 mirco-app

结合上述的调研结果,决定使用 micro-app 框架来架构这个大型项目。第一,micro-app 使用简单,学习成本低,小巧的体积和更高的扩展性;第二,老东家的技术,必须全力支持。

确定最终技术方案:

1、项目涉及到两个端,准备启用两个基座,这两个基座内管理鉴权和统一调用的公共逻辑,基座独立部署,属主应用。

2、项目中相同的UI部分,独立到业务组件库,可复用,业务逻辑部分,各自在项目中处理,相互独立。

3.2 启动 mirco-app

这里有详细的使用文档,就不再赘述,从引入依赖到项目完全渲染出来,只需要四步即可, micro-app 直通车:https://zeroing.jd.com/docs.html#/zh-cn/start

值得一提的是第二步,有个小坑,入口处引入包,然后调用方法。

如果你的项目是 Vue的话,这里说的入口文件应该是 main.js;如果你的项目是 umi 框架的话,入口文件指的的是 src/pages/.umi/umi.js 文件,这个文件是 umi 自动生成的,无法让你在这里面编码,所以你需要在 src 目录下面新建一个 index 或者 global 的文件,把下面的代码复制进去。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 项目入口处引入
import microApp from '@micro-zoe/micro-app'

microApp.start()

按照文档的指引,你应该看到这个界面,如果没有看到这个界面,那说明你的姿势有问题,可能是跨域导致,关于跨越问题,Q&A里面有解决方案,用《程序员的修炼之路》中的一句话来说:“读一下那些该死的报错信息”,没准你就能启动成功了。

图3.micro-app启动完成界面

顶部导航和左侧菜单是基座,也就是主应用,右侧的内容区域,是子应用。

3.3 踩坑 micro-app

3.3.1 路由问题

项目启动起来要面对的第一个问题就是路由问题。案例里面给的菜单是一级菜单,但是实际项目应用中可能有二级、甚至三级菜单,那怎么匹配路由跳转到对应的子应用呢?

核心代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  microApp.router.push({ 
    name: 'pop',  // 子应用名称
    path: `${config.pop}${item.url}`  // config是配置文件 item是当前点击的菜单路径信息
  });

处理逻辑:

1、优先处理树形菜单,树形菜单使用递归调用,后期不管是几级菜单都不用管它了。

2、与服务端约定好树形菜单的字段,除必要字段外,应该包含对应的子应用名称,路径,icon图标等信息,这些信息是你提前给服务端,配置到表结构中的。如果项目足够大的话,可以启一个SaaS系统,更加灵活和可靠。

3、当点击菜单中对应的某个菜单时,取到当前路径拼接域名即可完成跳转。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <micro-app
   name="pop"
   url={config?.pop}
 />

3.3.2 面包屑问题

强烈建议把面包屑放到子应用中,面包屑在子应用中的好处是自由完成跳转,不用主应用做特别的处理,唯一需要处理的是面包屑里面的首页,因为面包屑放到子应用中,点击回首页时,回到的其实是子应用的首页,并非是主应用的首页。

主应用处理逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from 'react';
import config from '@/config';

/** @jsxRuntime classic */
/** @jsx jsxCustomEvent */
import jsxCustomEvent from '@micro-zoe/micro-app/polyfill/jsx-custom-event';

export default ():React.ReactElement => {
  // 子应用点击了面包屑的回到首页
  const onDispathChild = (e:any) => {
    const { isBackHome } = e.detail.data;
    if (isBackHome) window.location.href = '/';
  };

  return (
    <>
      <micro-app
        name="pop"
        url={config?.pop}
        default-page={`${config?.pop}${config.defaultUrl}`}
        onDataChange={onDispathChild}
      />
    </>
  );
};

子应用逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  // 点击回到首页的时候,需要告诉父应用,让父应用去重置路由
  const onBackHome = () => {
    window.microApp?.dispatch({ isBackHome: true });
  };

micro-app 在 window 下面挂载了一个全局的对象,只需要去触发它提供的方法,完成主子之间的通信即可,这个逻辑想明白之后,不管是交互逻辑还是数据传递逻辑,一通都通。

3.3.3 打包问题

主子应用两个项目,在进行打包的过程,做了分包的处理,micro-app 中的js沙箱隔离技术有点小缺陷,由于主子应用使用的都是 umi 的框架,打包之后会错误的把子应用的包插入主应用中,导致应用报错,加载不出来。

处理逻辑:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 不分割组件

dynamicImport: false,

由于在实际项目操作中遇到的问题可能会比以上列举的比较多,上面举的是几个比较典型的例子。

04

总结微前端

理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构,转换完成后将通过表达式引擎解析表达式并取得正确的值,通过事件解析引擎解析用户自定义事件并完成事件的绑定,完成解析赋值以及事件绑定后进行视图的渲染,最终将目

最终这个大型项目采用微前端实现了业务解耦,维护性高,扩展性高的期望,后期迭代so easy。

用起来其实还是蛮简单的,但是用好了不容易,目前正在规划把一整个业务线集成到微前端中,因为有些项目太老了,无法维护了,把这些老项目直接一个链接成子应用,新的迭代的都独立成一个单独的子应用,可以使用新框架,新技术去实现,技能提高开发效率,又能很好的扩展和迭代,于是有些人觉得微前端技术很优秀,很受用。

以下是一些拆分逻辑,希望给使用微前端技术的同学一些参考:

使用微前端拆分一个大型项目需要注意以下几点:

1、拆分粒度:应该根据业务功能、团队职责、技术栈等因素来确定拆分粒度。拆分粒度太小会增加应用之间的通信成本,拆分粒度太大会影响独立开发和部署的能力。

2、拆分边界:应该确定每个小型应用的边界,使得每个应用都有自己的职责和业务逻辑。拆分边界应该尽可能地减少应用之间的耦合,同时又保证各个应用之间的协作和交互。

3、通信方式:应该确定小型应用之间的通信方式,包括接口、事件等。通信方式应该尽可能地简单和高效,同时又能够满足各个应用之间的协作和交互需求。

4、数据管理:应该确定小型应用之间的数据管理方式,包括数据共享、数据隔离等。数据管理方式应该尽可能地简单和高效,同时又能够满足各个应用之间的数据共享和隔离需求。

5、样式隔离:应该使用样式隔离技术,使得每个小型应用都可以使用自己的样式,不会影响其他应用的样式。这样可以保证各个应用之间的样式不会互相干扰,同时又不会影响应用之间的耦合。

6、集成方式:应该确定集成方式,包括微前端框架的选择、部署方式等。集成方式应该尽可能地简单和高效,同时又能够满足各个应用之间的集成需求。

总之,使用微前端拆分一个大型项目需要注意拆分粒度、拆分边界、通信方式、数据管理、样式隔离和集成方式等方面,以实现前端应用的解耦,提高可维护性和可扩展性。

打造SAAS化服务的会员徽章体系,可以作为标准的产品化方案统一对外输出。结合现有平台的通用能力,实现会员行为全路径覆盖,并能结合企业自身业务特点,规划相应的会员精准营销活动,提升会员忠诚度和业务的持续增长。

底层能力:维护用户基础数据、行为数据建模、用户画像分析、精准营销策略的制定

▪功能支撑:会员成长体系、等级计算策略、权益体系、营销底层能力支持

▪用户活跃:会员关怀、用户触达、活跃活动、业务线交叉获客、拉新促活

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 京东技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
体验首款Linux消费级平板,原来芯片和系统全是国产
不久前,我们介绍了由中国创业团队打造的移动操作系统JingOS,以及初代平板产品JingPad C1。
量子位
2023/03/01
2.5K0
体验首款Linux消费级平板,原来芯片和系统全是国产
“苹果吃饱”的平板市场,新老玩家的翻盘之争
中国信通院报告的数据显示,今年第一季度手机出货量同比增长超过100%,涨势喜人,但这更像是提前透支了下半年的市场需求“回光返照”。在随之而来的4、5月份,国内手机出货量增速迅速分别跌落至34.1%、32.0%,而刚刚过去的电子产品盛会“618”,对大多数手机厂商来说也更像是一波去库存活动。
用户2908108
2021/07/22
5610
和安卓用户FaceTime,一个鼠标操作iPad和Mac!没有新硬件的WWDC,就不行吗
当库克只身一人出现在乔布斯剧场舞台上,观众席一片欢呼,但定睛一看会发现,其实这些都是memoji小人。毫不意外的,本次开发者大会同样在线上举办。
大数据文摘
2021/07/06
1.7K0
腾讯文档 | 全平台系统设计
背景 “操作系统对我们而言已不是最重要的了,更重要的是应用和服务。” [1] - 微软 CEO Satya Nadella 去年微软发布的便携折叠屏设备 Surface Duo 首次搭载了来自 Google 的安卓系统,而微软 CEO 也在随后的采访中表示 Windows 系统已不是微软未来的重心,他们更关心开发者如何为这些设备创造应用,无论这个平台是 Windows 还是安卓。与此同时,为了更好地服务开发者,微软也终于将原有的 UI Fabric 框架和移动端框架迁移到一个库并统称为 Fluent
腾讯ISUX
2020/11/03
2.5K0
平板江湖:华为“行”、苹果“停”、小米“等一等”
近年来,随着人们对日常生活和办公中的智能电子产品提出了越来越高的要求,智能手机和平板电脑的产品类型便开始变得更加丰富、价位覆盖更为全面、场景应用也更显多样起来。只不过,在进入新的一年后,与智能手机市场新旗舰亮相后的短暂平静相比,国内平板电脑市场的热度似乎正在快速攀升。
刘旷
2024/02/28
1850
华为、苹果竞争未完,平板赛道再成舞台
12年前,第一代ipad在乔布斯手中被外界认知,即便ipad并不是第一款平板,但不得不承认,至此之后平板电脑才走向了更加广阔的舞台。
用户2908108
2022/12/17
3960
华为、苹果竞争未完,平板赛道再成舞台
库克背刺等等党,iPad新老款全涨价,配件上还想多赚67元
iPad 9涨价100元,iPad mini涨价200元,今年3月发布的iPad Air 5更是400元起涨。
量子位
2022/12/08
4600
库克背刺等等党,iPad新老款全涨价,配件上还想多赚67元
为什么手机厂商都纷纷入局自研操作系统?
2020 年 9 月 10 日,华为召开了开发者大会,正式推出了 HarmonyOS 2.0 系统,并宣布为开发者提供完整分布式设备与应用开发生态。
巫山老妖
2023/11/22
6060
为什么手机厂商都纷纷入局自研操作系统?
鸿蒙系统 PC 版要来了?和现有国产 PC 系统有什么不同?
最近关于鸿蒙系统的消息不断。9月20日,央视新闻全程直播了上海南京东路华为全球最大旗舰店的华为 Mate XT 非凡大师三折叠屏首销活动。这场直播的焦点无疑是华为 Mate XT 三折叠屏手机,令人印象深刻。在直播过程中,余承东无意中提及了鸿蒙 PC,就是下面这一段:
云水木石
2025/01/23
5770
鸿蒙系统 PC 版要来了?和现有国产 PC 系统有什么不同?
花17000元在元宇宙里用Linux?这款VR电脑开启预售,头显就是主机的那种,搭载英特尔i7
明敏 发自 凹非寺 量子位 | 公众号 QbitAI 现在,在虚拟世界里写代码要成为现实了! 只要戴上VR眼镜,掏出你的键盘,一串串代码就能在你眼前飞出: 脑袋稍稍转个角度,就能浏览网页: (嗯,去翻Google、Stack Overflow、GitHub…更方便了一点) 在咖啡店、草地上写代码也都OK,还能开启AR模式不妨碍与人沟通: 到这里你可能发现了华点,这个VR眼镜并不只是个替代显示屏的工具,它自己就具备计算处理的能力。 没错,这其实是一台VR电脑! 这台名叫Simula One的头显设备
量子位
2022/03/04
5750
其实,我们也在努力做CPU
全球的缺芯风潮愈演愈烈,也让很多中国人开始关注起芯片。谈到中国的国产CPU,很多人都恨铁不成钢,“泱泱大国,怎么小小的芯片也做不好?人家的芯片都做到i9了,你们怎么还只有i5的水平?”
云水木石
2021/04/22
4820
库克「忘带」电脑,iOS 15 炸开 WWDC!Mac和iPad无缝融合,「昂贵苹果税」你交得起么?
---- 新智元报道   来源:WWDC 编辑:编辑部 【新智元导读】昨夜,「科技春晚」WWDC准时开幕,苹果宣布了iOS 15以及针对FaceTime APP推出新款音频和视频功能。另外,增强后的「Universal Control」令Mac和iPad无缝融合,令你的手指尽享丝滑。据悉,此次开发者大会将延续至6月11日。没有任何硬件,只有5大系统的升级。 没有任何硬件,只有5大系统的升级。 今年的WWDC大会在美国太平洋时间 6 月 7 日开幕,还是那个苹果园,还是库克。 不同的是,库克在全场 Me
新智元
2023/05/22
5320
库克「忘带」电脑,iOS 15 炸开 WWDC!Mac和iPad无缝融合,「昂贵苹果税」你交得起么?
iPad Pro 是生产力工具吗?
时常听见有人揶揄,说 iPad Pro 这东西是「买前生产力,买后爱奇艺」。想要用它提升效率的冲动很常见。但拿它正经来做事情,是不靠谱的。
王树义
2021/07/08
1.1K0
iPad Pro 是生产力工具吗?
12.9英寸iPad?知名爆料者:超大iPad或带玻璃后盖,2022年推出
据彭博社知名爆料者 Mark Gurman 最新消息,苹果目前正研发更大尺寸的 iPad,屏幕尺寸将大于当前在售的 iPad Pro 12.9 英寸版本。
新智元
2021/07/29
8840
AIPC的“名利场”里,Wintel联盟还有机会吗?
联想、华硕、华为、荣耀、三星、雷神……几乎所有的主流PC厂商都推出了AIPC产品。不管你是否理解、是否认同AIPC的理念,在终端厂商自上而下地推动下,属于AIPC的时代都已经到来。
Alter聊科技
2024/05/27
1490
AIPC的“名利场”里,Wintel联盟还有机会吗?
iPadOS生产力翻身,Mac Pro官方攒机 | 软、硬皆出彩的WWDC19
整场开幕演讲下来虽然有槽点,但也有惊喜,整体进步很大。除了重头戏 IOS13操作系统更新之外,还有全新的TV OS,提供了全新的多用户管理;Apple Watch有了独立的App Store和独立应用接口;针对iPad,IOS13被重新命名为iPad OS等。
大数据文摘
2019/06/10
1.4K0
iPadOS生产力翻身,Mac Pro官方攒机 | 软、硬皆出彩的WWDC19
硬刚苹果微软?!谷歌发布x86二合一平板电脑—Pixel Slate
1. 外观方面,Pixel Slate采用深蓝配色,机身使用铝材,厚度仅7毫米左右,极致超薄,重量约为725克。
ianzhi
2019/07/31
1K0
硬刚苹果微软?!谷歌发布x86二合一平板电脑—Pixel Slate
苹果新系统很鸿蒙!iPad终于能写代码了,iPhone竟成异地恋神器 | WWDC 2021
在全球疫情还未缓解的情况下,今年,苹果的WWDC开发者大会,和去年一样全场除了库克“空无一人”。
量子位
2021/06/17
1.5K0
Winter漫聊手机——开篇
所谓漫聊,即无忧虑地聊,且不局限。因而,虽说是聊手机,但Winter也会附带性地聊点电脑、相机、VR及厂商等。时间顺序总是最适合懒人的,那就从2011年聊起吧。
冰之角
2018/09/04
1.4K0
Winter漫聊手机——开篇
解读操作系统的2021:触到了创新的天花板,却站在巨变的前夜
本文是“2021 InfoQ 年度技术盘点与展望”系列文章之一,由 InfoQ 编辑部制作呈现,重点聚焦操作系统在 2021 年的重要进展、动态,希望能帮助你准确把握 2021 年操作系统的核心发展脉络,在行业内始终保持足够的技术敏锐度。
深度学习与Python
2022/03/01
8590
推荐阅读
相关推荐
体验首款Linux消费级平板,原来芯片和系统全是国产
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档