基于umi-nest实现微前端子应用
项目代码 基于umi-nest实现微前端子应用
公众号 《前端厚说》
QQ小群 713593204
根据实际场景去探索更优的方案是我们应该去积极面对的。那么面对着越来越大型的项目。例如TOB
的前端开发,我们往往会遇到一些困境
随着微前端的兴起,慢慢业内开始对之进行探索,不断的挖坑踩坑。针对以上或者不仅仅是以上的痛点。我们决定尝试以小组
为单位,集体实践。那么我们需要面对的问题就来了
要求实现一个应用里包含其他的子应用这种效果,“不起眼” 的iframe 以及单页面应用等等均可以实现这种目的。
为了避免page之间互相影响,每个page采用统一公共的iframe加载。公共的iframe由框架设计提供相关API支撑,比如,提示、通信等。
在采用iframe来加载带来的一些问题:
最初是jquery技术栈,不具可行性,潜在问题太多,比如:同一个页面需要在多个区域多次展示,随着功能的叠加,选择器效率大大降低,样式的互相影响也不可避免。
业内已经有开发者对之探索,我们重点采取qiankun
这也是踩在巨人的肩膀上。那么什么是微前端
在前端的前一阶段,我们还是仅仅切图
然后后端进行套页面。慢慢地慢慢地我们开始进行前后端分离。慢慢的出现三大框架,也是主流的框架。前端还得会PS
那在2016
年时候,被提出,也是和微服务概念
有异曲同工之妙。
Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently.
我们可以称:微前端是一种方案,或者策略方法技术。我们可以实现由
不同的团队
不同的技术
构建统一化的现代web应用程序
即使我们不在自己的项目实践微前端,但是在面试
或者一些其他的场景中,难免会提及,就像是TypeScript
一样,凡是流行的,就是大家关注的。我们可能会想得到这样一个效果
那么既然有许多优势,我们实际操作起来又会遇到什么问题呢?比如说像是js代码的隔离
css样式的冲突
按需加载资源
。一些冲突我们可想而知,是再所难免的。为什么这样说,因为一个简单的项目由不同的开发人员参与难免还会出现命名的冲突。
既然明确了我们的目标,以及技术方案,以及设想到了可能带来的优势与挑战。我们拟分析一下当前的需求
结合当前业内流行的技术栈,我们选择Reatc
结合 TypeScript
需求点 | 收益要求 |
---|---|
拆分解耦 | 页面是页面,组件拆分解耦,(例如像弹窗组件) |
学习成本 | 保持单页面开发的体验 |
统一技术栈 | 子应用禁止使用不同的技术栈开发 |
项目实现一个后台的admin
管理后台能够对数据进行操作
由于是实践项目我们重点分析需求的技术可行性:使用 web
前端技术 ,利用MySQL
数据库,以及TypeORM
进行数据实体的设计。在技术上可行的
在设计之初,我们需要对子应用
的流程进行简单的分析。
由于微前端
的概念是由 后端微服务
直接或间接产生,并且保证每个子应用能够独立运行。那就需要一套能够提供服务的接口,以及前端一套前端页面
后端接口选取当下NodeJS
的上层框架NestJS
。经调研,NestJS
是一个精美的node.js 框架,考虑到使用原生的NodeJS
是有一定的成本在,包括一些 错误捕捉监控等等
。NEST 是构建高效,可扩展的 NodeJS 服务器端应用程序的框架。
TS
语法,上手成本较高前端的框架以及技术层出不穷,吸取他人优秀的开发实践是一件比较不错的事情。国内阿里鉴于项目的实践一般为
所以我们打算采用UmiJS
,有更好的数据流管理,更好的结合TS
与 antd
。但在实践的过程中难免会遇到一些坑
。不过可以积极拥抱社区
前端 | 后端 |
---|---|
基于umi生态的前端方案 | 基于NodeJS的后端方案 |
根据上述的需求分析
我们的系统暂时分为几个模块
实践是检验真理的唯一标准 , 实际开发的过程便是个遇到问题
解决问题
的过程。故拟定一份开发时间进度表
日期 | 前端进度 | 后端进度 |
---|---|---|
2020-06-17 | 初始化前端项目 | 初始化后端项目 |
子应用需要独立运行
子应用包含登录页面
子应用包含两个模块 模块之前要求能够通信
子应用必须 存在表单、表格、弹出框、图片
功能上要有数据的增删改查一些基本开发需求
子应用尽量引入插件
子应用需要同主应用进行通信
例如用户的登录状态,主应用登录上,子应用应该自动登录
子应用可以同子应用通信
2020-06-17 第一次拟定项目的策划内容