搭建 umi + qiankun + antd 的微前端平台

关键词:

  • umi
  • qiankun
  • ant design pro
  • 非动态注册子应用
  • 非动态装载子应用(路由)

背景

银行项目,需要一个前端中台,承载各项目组开发的应用,本篇文章是在工作实践后所写,还是具有一定可借鉴性的,至于官网已经有相关内容还专门写这么一篇,还是因为在实践中官网中的部分不完善,导致搭建过程异常坎坷。

搭建主应用工程

主应用一般都是类后管平台,因此我使用 ant-deisng-pro 做主应用,使用以下命令创建:

参考:https://pro.ant.design/index-cn(页面底部)

yarn create umi main-app

ant-design-pro
pro v4
ts
simple
antd@4

搭建子应用工程

使用以下命令创建:

yarn create @umijs/umi-app sub-app-1

主应用

安装qiankun

yarn add qiankun

安装@umijs/plugin-qiankun

yarn add @umijs/plugin-qiankun -D

注册子应用

参考:
https://umijs.org/zh-CN/plugins/plugin-qiankun#a-插件构建期配置子应用

在 config/config.ts 文件中,仿照以下代码进行添加:

子应用的工程名称是:sub-app-1
子应用的端口是:8001

{
  ...
  qiankun: {
    master: {
      apps: [
        {
          name: 'sub-app-1',
          entry: '//localhost:8001',
        },
      ],
    },
  },
}

装载子应用(路由)

现在还差个指向子应用的路由。
在 config/config.ts 文件中,仿照以下代码,在 routes 属性下进行添加:

{
  name: 'sub-app-1',
  icon: 'smile',
  path: '/sub-app-1',
  microApp: 'sub-app-1',
},

示例文件

担心大家不会,此处还提供一个在已经配置好了的 config/config.ts 文件。
config.ts

子应用

安装@umijs/plugin-qiankun

yarn add @umijs/plugin-qiankun -D

注册刚安装的插件

参考:
https://umijs.org/zh-CN/plugins/plugin-qiankun#第一步:插件注册(configjs)

在 .umirc.ts 文件中添加以下代码:

qiankun: {
 slave: {}
}

添加后如下:

import { defineConfig } from 'umi';

export default defineConfig({
  nodeModulesTransform: {
    type: 'none',
  },
  routes: [
    { path: '/', component: '@/pages/index' },
  ],
  qiankun: {
   slave: {}
  }
});

修改工程名称

打开 package.json 文件,在第一行添加属性 name 及相应属性值。

导出相应生命周期钩子

参考:
https://umijs.org/zh-CN/plugins/plugin-qiankun#第二步:配置运行时生命周期钩子(可选)


在 src/app.ts 中添加以下代码,app.ts 如果不存在则需要自行创建:

export const qiankun = {
  // 应用加载之前
  async bootstrap(props) {
    console.log('app1 bootstrap', props);
  },
  // 应用 render 之前触发
  async mount(props) {
    console.log('app1 mount', props);
  },
  // 应用卸载之后触发
  async unmount(props) {
    console.log('app1 unmount', props);
  },
};

效果

主应用效果

image.png

子应用效果

image.png

Github源代码

https://github.com/blueju/umi-mirror-docs/tree/umi-micro-fe-platform

结语

以上配置均不是动态注册子应用、动态装载子应用(路由),但现实项目中更多需要的是动态注册子应用、动态装载子应用(路由)。

TODO

  • 写一篇如何动态注册子应用、动态装载子应用(路由)的blog

首发于语雀文档

### 如何在 Ant Design Pro 中实现微前端架构 #### 实现微前端架构的意义 为了应对复杂的企业级应用需求,采用微前端架构能够显著提高项目的可维护性和灵活性。这种架构允许不同的团队独立开发、部署各自负责的应用模块,同时这些模块可以在同一个页面中无缝协作[^3]。 #### 微前端的技术选型 Ant Design Pro 基于 React 构建,并集成了 umi 和 dva 等先进的前端框架和技术栈。umi 提供了强大的路由管理和插件化能力,这为实施微前端架构奠定了坚实的基础;dva 则简化了状态管理流程,有助于保持各个子应用之间的松耦合关系[^2]。 #### 创建主应用程序 首先,在主应用程序中安装 `qiankun` 插件来支持微前端功能: ```bash npm install qiankun --save ``` 接着修改配置文件 `.umirc.ts` 或者 `_config/@umijs/config.js` 来注册子应用: ```typescript // .umirc.ts or _config/@umijs/config.js export default { plugins: [ ['umi-plugin-react', {}], 'qiankun', ], qiankun: { master: { apps: [ { name: 'app1', entry: '//localhost:8001' }, { name: 'app2', entry: '//localhost:8002' } ] } } } ``` #### 子应用的改造 对于每一个作为微前端一部分的小型React应用来说, 需要将其转换成一个可以被QianKun识别并加载的形式。具体做法是在每个子应用根目录下新建或编辑现有的入口文件(main.jsx),按照如下方式进行调整: ```jsx import ReactDOM from "react-dom"; import App from "./App"; if (!window.__POWERED_BY_QIANKUN__) { ReactDOM.render(<App />, document.getElementById('root')); } /** * bootstrap 只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。 */ export async function bootstrap() {} /** * 应用每次进入都会调用 mount 方法,通常我们在这里做一些数据的初始化操作。 */ export async function mount(props) { console.log('props from main framework', props); ReactDOM.render( <App />, document.querySelector('#root') ); } /** * 应用每次退出都会调用 unmount 方法,通常在这里我们会卸载当前应用的一些事件监听器等。 */ export async function unmount(props) { await ReactDOM.unmountComponentAtNode(document.querySelector('#root')); } ``` 上述代码片段展示了如何使子应用兼容 QianKun 的生命周期钩子函数(`bootstrap`, `mount`, `unmount`),从而让其能够在主应用环境中正常工作[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值