目前通过一系列调研,大致总结出主流微前端方案大致分为前端
本文主要介绍EMP落地,概念能够经过其余相关文章进行了解react
目前业务中台在业务推动过程当中遇到比较多的问题是webpack
从开发初期咱们约定了中台的统一框架:React & hook
+ React-dom
+ React-router-dom
+ Mobx
+ Typescript
,减小后期的额外框架消耗以及维护成本;
复用组件、工具库之间使用lerna + monorepo 方式下沉项目组件,经过npm方式安装到独立业务git
从项目过程当中遇到形形式式的包管理问题,以及代码重复打包,包信息更新不能及时等等问题github
自组织模式:应用之间是平等的,不存在相互管理的模式。设计难度大,不方便实施,可是通用度高。
从目前主流开发模式下是很难完成 自组织模式的微前端落地,直到 Module Federation
的出现web
Module Federation
的特性中咱们挖掘出一套属于业务中台的设计模型
基站式微前端 | EMP 微前端 | |
---|---|---|
路由 | 注册机制+子项目自定义 | 项目自定义,无需注册 |
支持多框架 | 支持 | 约定React框架(减小冗余与维护成本) |
复用组件引用 | 沙箱方式 | 可共享状态组件方式 |
部署入口 | 基座 | 任何项目能够做为入口 |
Store 状态共享 | 需改造 | 无需改造、无需注册、直接调用 |
模块调用 | 部分须要进行改造 | 直接调用 |
配置中心 | 约定入口 | 无(独立入口或独立组件支持,无需配置) |
Typescript类型提示 | 没法判断 | 提供一站式类型判断闭环 |
项目重构 | 须要根据约定重构 | 修改引用便可 |
以 antd
+ react-router-dom
为例经过远程方式引入外部定义好的骨架应用npm
//base->App.tsx
const App = ({layout, routes, stores}: RouterCompType) => (
<StoreProvider stores={stores}> <RouterComp layout={layout} routes={routes || []} /> </StoreProvider> ) 复制代码
当前应用引入外部库bootstrap
//app->bootstrap.tsx
import EMPApp from '@emp-antd/base/App'
import stores from 'src/stores'
const App = () => <EMPApp routes={routes} stores={stores} />
复制代码
远程同步ts类型代码提示antd
EMP基站主要做用是组织和共享通用库,而非统一入口、统一配置react-router
框架级基站(以框架/技术栈为基础,为子基站提供框架级别的布局,方法,组件)
优势:
在开发过程当中会遇到公共库的不断迭代以及项目使用的兼容性问题
Module Federation
在webpack5 beta-17
后支持定义版本,不一样入口能够应用能够定制本身的引用库版本如 React:16.13.1
,而后从基站库相应版本里调用相应的组件域名规范遵循 emp-antd-[业务名称]-[环境].[一级域名].com。遵循这个规范,经过域名就能知道当前技术栈以及业务类型。
从实战过程当中已经能够知足目前业务中台的微前端需求,调用以及协同方面也获得更好的推动
![]() Ken.Xu |
![]() D.Ragon |
![]() Abel |
![]() Benny Shi |
![]() Jiguli |