微前端建設方案

 

第1章 概述

爲解決項目前端的高耦合、改動牽一髮而動全身、多種技術棧強制混用、前端反覆重構不徹底的問題,提出微前端的建設。

微前端指的是一種由獨立交付的多個前端應用組成整體的架構風格。具體的,將前端應用分解成一些更小、更簡單的能夠獨立開發、測試、部署的小塊,而在用戶看來仍然是一個整體。

第2章 需求分析

2.1 現狀分析

目前GA-OA項目的前端是一個整體項目,每一次變更整體打包、部署,項目跟隨需求變動越來越龐大,達到200M

需求迭代頻繁、多種風格與組件混用,研發週期較長。

2.2 微前端需求

要求根據業務,將前端進行拆分,獨立研發、測試、部署、運行,達到解耦的目的。

2.3 技術需求

要求:

1、前端主框架,跟技術架構無關,不具備特性。

2、應用微前端,可以集成主框架運行,可以獨立運行。

3、應用微前端,不能強依賴主框架的基礎文件。

 

2.4 總體設計

第3章 架構設計

3.1 微前端架構設計

實現“1+1+N模式”。1個不具備特性的前端框架,1個主應用前端實現佈局、首頁等特性,N個業務應用前端(不受前端技術限制)集成。

 

3.2 微前端技術設計

qiankun(乾坤) 就是一款由螞蟻金服推出的比較成熟的微前端框架,基於 single-spa 進行二次開發,用於將 Web 應用由單一的單體應用轉變爲多個小型前端應用聚合爲一的應用。

第4章 研發清單

4.1 研發清單

前端架構

 

1

主架構前端

 

2

測試Demo前端

 

3

主應用前端(IBPS)

 

應用微前端

 

1

公文辦理前端

 

2

通知公告前端

 

3

會議前端

 

4

規範性前端

 

5

主應用前端(改造)

 

 

 

 

 

第5章 建設步驟

5.1 前端主架構

搭建前端的基底框架(乾坤),可以集成主應用、業務應用,無技術限制。

研發主應用與微前端需要的公共組件、腳本

5.2 Demo測試

研發一個Demo,包含:主架構、主應用(整個GA-OA前端)、應用微前端,可以訪問主應用,同時可以訪問獨立應用微前端。

5.3 主應用集成

GA-OA整個前端作爲主應用,集成至主架構。

5.4 公文辦理

l 重構公文辦理應用微前端

l 公文辦理微前端,集成至主架構

主應用(GA-OA)剔除公文辦理相關源碼

5.5 通知通告

l 重構通知公告微前端

l 通知公告微前端,集成至主架構

主應用(GA-OA)剔除通知公告相關源碼

5.6 會議管理

l 重構會議管理微前端

l 會議管理微前端,集成至主架構

主應用(GA-OA)剔除會議管理相關源碼

5.7 規範性文件

l 重構規範性文件微前端

l 規範性文件微前端,集成至主架構

主應用(GA-OA)剔除規範性文件相關源碼

5.8 主應用改造

l 重構主應用

l 主應用,集成至主架構

l 整個項目全部完成替換

 

第6章 接入規範

 

微應用不需要額外安裝任何其他依賴即可接入 qiankun 主應用。

6.1 導出相應的生命週期鉤子

微應用需要在自己的入口 js (通常就是你配置的 webpack entry js) 導出 bootstrapmountunmount 三個生命週期鉤子,以供主應用在適當的時機調用。

/**

 * bootstrap 只會在微應用初始化的時候調用一次,下次微應用重新進入時會直接調用 mount 鉤子,不會再重複觸發 bootstrap

 * 通常我們可以在這裏做一些全局變量的初始化,比如不會在 unmount 階段被銷燬的應用級別的緩存等。

 */

export async function bootstrap() {

  console.log('react app bootstraped');

}

 

 

/**

 * 應用每次進入都會調用 mount 方法,通常我們在這裏觸發應用的渲染方法

 */

export async function mount(props) {

  ReactDOM.render(<App />, props.container ? props.container.querySelector('#root') : document.getElementById('root'));

}

 

 

/**

 * 應用每次 切出/卸載 會調用的方法,通常在這裏我們會卸載微應用的應用實例

 */

export async function unmount(props) {

  ReactDOM.unmountComponentAtNode(

    props.container ? props.container.querySelector('#root') : document.getElementById('root'),

  );

}

 

 

/**

 * 可選生命週期鉤子,僅使用 loadMicroApp 方式加載微應用時生效

 */

export async function update(props) {

  console.log('update props', props);

}

 

6.2 配置微應用的打包工具

除了代碼中暴露出相應的生命週期鉤子之外,爲了讓主應用能正確識別微應用暴露出來的一些信息,微應用的打包工具需要增加如下配置:

webpack:

const packageName = require('./package.json').name;

 

module.exports = {

  output: {

    library: `${packageName}-[name]`,

    libraryTarget: 'umd',

    jsonpFunction: `webpackJsonp_${packageName}`,

  },

};

 

6.3 跨域配置

vue.config.js 修改

headers: {

      'Access-Control-Allow-Origin': '*'

    }

 

6.4 路由設計

子應用路由模式採用 hash 模式

 

附件:工作量評估

前端架構

工作量(人天)

1

主架構前端

7

2

測試Demo前端

14

3

主應用前端(IBPS)

7

應用微前端

 

1

公文辦理前端(重構)

60

2

通知公告前端

20

3

會議前端

30

4

規範性前端

20

5

主應用前端(改造)

持續

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章