目前通過一系列調研,大致總結出主流微前端方案大致分爲前端
本文主要介紹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 |