最近在作公司微前端,整理了一份微前端搭建清单,若是你正在考虑是否要作微前端,不妨作个参考。前端
第一步,咱们须要进行需求分析,以便真正清楚咱们须要解决的问题是什么。webpack
例如:web
前两个需求是典型的业务需求,它的核心在于解决公司的业务问题,对于这一类需求,一般技术难度都不大,开发者只须要按照原型图,编写出对应的页面就能够了。docker
后两个需求是典型的技术需求,它的核心在于解决技术问题。一般来讲,技术需求和用户体验有关,但不会影响项目功能,因此通常产品不多会提技术需求,都是由开发同窗主导。后端
目前不少公司都不过重视技术需求,主要是由于和公司业务无关,不能带来真实可见的收益。其实否则,一些技术需求每每能产生巨大的成本收益,因此咱们在作技术需求时,首先须要获得公司的支持。浏览器
解决一个技术需求,有不少种方法,为何选微前端?服务器
咱们看过微前端的发展史就会明白,它并非凭空出现的,而是项目在不断发展过程当中造成的,解决项目臃肿的技术方案。cookie
一个项目在刚成立时,体量很小,但随着项目不断作大,可能会出现如下问题:架构
对于这些问题,很难找到一个完美的解决方案,因而就诞生了微前端。框架
有了微前端以后,咱们能将一个大项目拆分红多个小项目,这样一来,每个小项目就很是好优化了。在优化了全部的小项目后,咱们再将这些小项目组合起来,就能造成一个完美的大项目了。
在实际项目中,若是遇到如下问题,能够考虑使用微前端:
除此以外,还有不少实际状况没有列举完毕,不过不要紧,只要咱们明白了微前端的特色,就能判断任何状况。
微前端的核心是解决巨石应用,它都有这些特色:
简单、松耦合的代码库
增量升级
独立部署
团队自治
除此以外,微前端提供了一套新的生态系统。它经过拆分小项目,产生了大量的微应用。试想一下,若是你们都将微应用上传到云,那么就会构建一个很是强大的微应用云生态。咱们在之后作需求时,也许就是选择各类适合的微应用,而后拼接起来,就完事了。对此保持期待。
固然,微前端也不是万能的,它也存在如下问题:
这些问题大可能是由于项目拆分红多个项目以后,引起的沟通协做问题。
第二步,咱们须要肯定具体的微前端实现方式。
实现微前端有不少种方式:
路由分发式
前端容器化
前端微服务化
微件化
微应用化
应用组件化
下图是各类方案的优缺点:
这么多方案,各有利弊,咱们应该如何选择呢?
有了技术方案以后,微前端这条路就能够走通了,除此以外,还需考虑过渡方案。
过渡方案指的是如何让微前端平滑上线。试想一下,若是在微前端改造时,项目来了新需求,这时应该怎么办?
对于这个问题,建议在作微前端改造时,最好快速上线:
主项目快速搭建好路由、子应用管理,而后当即上线。
第三步,咱们须要想一想,咱们要怎么拆分咱们的项目呢?
常见的拆分方案以下:
按照业务拆分
按照权限拆分
按照变动的频率拆分
按照组织结构拆分
跟随后端微服务拆分
到了这里,咱们已经完成了微前端的拆分,但并非拆完了就结束了,咱们还考虑一些拆分后的问题。
例如:
这些问题每每和业务相关,咱们在改造时自行判断便可。
最后一步,咱们须要考虑部署流程。
当微前端开发完成以后,咱们的项目由 1 个变成了 1 + n(子项目) 个,部署方式势必会发生变化。
传统的部署方式以下:
微前端项目部署方式以下:
能够看到,项目最终的结构已经彻底不一样了,开发,测试,部署的流程也都须要进行变化。
开发环境其实不须要部署,一般是前端启动一个 localhost 页面,去调后端的接口进行开发。
须要注意的是:
测试环境部署变化挺大的,并且涉及到了跨部门沟通,因此应该谨慎对待。
之前测试部署流程是:前端只须要提供一个打包文件,测试将文件解压后,放入指定的静态资源目录便可。
微前端以后的部署流程:前端须要提供主项目和相关子项目的打包文件,测试须要分别发布多个项目,才能进行测试。
这样改动以后,测试的工做量变大了,对于手动部署的测试来讲,确实有很大的影响。为了减小测试的工做量,咱们能够协助测试来搭建一套自动化部署工具。
不少大厂都有本身内部的云服务平台,就像阿里云的 k8s 控制台同样,测试能够在控制台上选择须要部署的前端、后端的分支,而后点击一键部署,就搞定了。
对于线上环境来讲,运行的是 1 个主项目和 n 个子项目,每一个项目都是独立部署且相互独立的,很是适合容器化部署,即:每个项目都被部署到一个 docker 中,彼此经过主项目进行关联。
如图,全部的子项目都交由主项目管理。
若是公司内部作了持续部署,部署就会更加简单。
本文从需求分析开始,一步一步理清了微前端须要注意的各类问题,以及一些解决方案,但愿能对微前端感兴趣的你有所收获。
其实,微前端没有想象中的那么难,若是是用 qiankun、single-spa 等现成框架,学习成本都很是低,关键是要真正动手去作,只要开了头,后面的问题也就不是什么问题了。
最后,若是你对此有任何想法,欢迎留言评论!