各位编程的小伙伴,今天广州蓝景小编继续跟大家分享前端技术相关文章:微前端架构的几种技术选型,你了解吗?
随着SPA大规模的应用,紧接着就带来一个新问题:一个规模化应用需要拆分。
一方面功能快速增加导致打包时间成比例上升,而紧急发布时要求是越短越好,这是矛盾的。另一方面当一个代码库集成了所有功能时,日常协作绝对是非常困难的。
而且最近十多年,前端技术的发展是非常快的,每隔两年就是一个时代,导致做编程的人员必须升级项目甚至于换一个框架。但如果大家想在一个规模化应用中一个版本做好这件事,基本上是不可能的。
最早的解决方案是采用iframe的方法,根据功能主要模块拆分规模化应用,子应用之间使用跳转。但这个方案最大问题是导致页面重新加载和白屏。
那有什么好的解决方案呢?微前端这样具有跨应用的解决方案在此背景下应运而生了!
首先:微前端的概念
微前端是什么:微前端是一种类似于微服务的架构,是一种由独立交付的多个前端应用组成整体的架构风格,将前端应用分解成一些更小、更简单的能够独立开发、测试、部署的应用,而在用户看来仍然是内聚的单个产品。有一个基座应用(主应用),来管理各个子应用的加载和卸载。
所以微前端不是指具体的库,不是指具体的框架,不是指具体的工具,而是一种理想与架构模式。
微前端的核心三大原则就是:独立运行、独立部署、独立开发
微前端的优势
采用微前端架构的好处就是,将这些小型应用融合为一个完整的应用,或者将原本运行已久、没有关联的几个应用融合为一个应用可以将多个项目融合为一,又可以减少项目之间的耦合,提升项目扩展性。
实现微前端的几种方式
从single-spa到qiankun
基于WebComponent的micro-app
webpack5实现的ModuleFederation
微前端框架的分类
Single-spa
single-spa是一个很好的微前端基础框架,而qiankun框架就是基于single-spa来实现的,在single-spa的基础上做了一层封装,也解决了single-spa的一些缺陷。
首先我们先来了解该如何使用single-spa来完成微前端的搭建。
Single-spa实现原理
首先在基座应用中注册所有App的路由,single-spa保存各子应用的路由映射关系,充当微前端控制器Controler,。URL响应时,匹配子应用路由并加载渲染子应用。上图便是对single-spa完整的描述。
有了理论基础,接下来,我们来看看代码层面时如何使用的。
以下以Vue工程为例基座构建single-spa,在Vue工程入口文件main.js完成基座的配置。
基座配置
//main.js
importVuefromvue
importAppfrom./App.vue
importrouterfrom./router
import{registerApplication,start}fromsingle-spa
Vue.config.productionTip=false
constmountApp=(url)={
returnnewPromise((resolve,reject)={
constscript=document.createElement(script)
script.src=url
script.onload=resolve
script.onerror=reject
//通过插入script标签的方式挂载子应用
constfirstScript=document.getElementsByTagName(script)[0]
//挂载子应用
firstScript.parentNode.insertBefore(script,firstScript)
})
}
constloadApp=(appRouter,appName)={
//远程加载子应用
returnasync()={
//手动挂载子应用
awaitmountApp(appRouter+/js/chunk-vendors.js)
awaitmountApp(appRouter+/js/app.js)
//获取子应用生命周期函数
returnwindow[appName]
}
}
//子应用列表
constappList=[
{
//子应用名称
name:app1,
//挂载子应用
app:loadApp(