前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微前端建设方案

微前端建设方案

作者头像
Dawnzhang
发布2022-05-10 09:37:54
4730
发布2022-05-10 09:37:54
举报

第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 公文办理微前端,集成至主架构

l 主应用(GA-OA)剔除公文办理相关源码

5.5 通知通告

l 重构通知公告微前端

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

l 主应用(GA-OA)剔除通知公告相关源码

5.6 会议管理

l 重构会议管理微前端

l 会议管理微前端,集成至主架构

l 主应用(GA-OA)剔除会议管理相关源码

5.7 规范性文件

l 重构规范性文件微前端

l 规范性文件微前端,集成至主架构

l 主应用(GA-OA)剔除规范性文件相关源码

5.8 主应用改造

l 重构主应用

l 主应用,集成至主架构

l 整个项目全部完成替换

第6章 接入规范

微应用不需要额外安装任何其他依赖即可接入 qiankun 主应用。

6.1 导出相应的生命周期钩子

微应用需要在自己的入口 js (通常就是你配置的 webpack 的 entry js) 导出 bootstrap、mount、unmount 三个生命周期钩子,以供主应用在适当的时机调用。

/**

 * bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。

 * 通常我们可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等。

 */

代码语言:javascript
复制
export async function bootstrap() {

  console.log('react app bootstraped');

}

/**

 * 应用每次进入都会调用 mount 方法,通常我们在这里触发应用的渲染方法

 */

代码语言:javascript
复制
export async function mount(props) {

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

}

/**

 * 应用每次 切出/卸载 会调用的方法,通常在这里我们会卸载微应用的应用实例

 */

代码语言:javascript
复制
export async function unmount(props) {

  ReactDOM.unmountComponentAtNode(

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

  );

}

/**

 * 可选生命周期钩子,仅使用 loadMicroApp 方式加载微应用时生效

 */

代码语言:javascript
复制
export async function update(props) {

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

}

6.2 配置微应用的打包工具

除了代码中暴露出相应的生命周期钩子之外,为了让主应用能正确识别微应用暴露出来的一些信息,微应用的打包工具需要增加如下配置:

代码语言:javascript
复制
webpack:

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

 

module.exports = {

  output: {

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

    libraryTarget: 'umd',

    jsonpFunction: `webpackJsonp_${packageName}`,

  },

};

6.3 跨域配置

vue.config.js 修改

代码语言:javascript
复制
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

主应用前端(改造)

持续

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第1章 概述
  • 第2章 需求分析
    • 2.1 现状分析
      • 2.2 微前端需求
        • 2.3 技术需求
          • 2.4 总体设计
          • 第3章 架构设计
            • 3.1 微前端架构设计
              • 3.2 微前端技术设计
              • 第4章 研发清单
                • 4.1 研发清单
                • 第5章 建设步骤
                  • 5.1 前端主架构
                    • 5.2 Demo测试
                      • 5.3 主应用集成
                        • 5.4 公文办理
                          • 5.5 通知通告
                            • 5.6 会议管理
                              • 5.7 规范性文件
                                • 5.8 主应用改造
                                • 第6章 接入规范
                                  • 6.1 导出相应的生命周期钩子
                                    • 6.2 配置微应用的打包工具
                                      • 6.3 跨域配置
                                        • 6.4 路由设计
                                        • 附件:工作量评估
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档