加载中...
  • umijs qiankun 初体验

    背景:

    一些大的项目,需要一个前端中台,承载各项目组开发的应用,本篇文章是在工作实践后所写,网上找了好多例子也少,记录下来后面供自己预览

    qiankun 是一个基于 single-spa 的微前端实现库
    umi 插件,提供了 @umijs/plugin-qiankun 供 umi 应用一键切换成微前端架构系统。

    搭建主应用

    yarn create @umijs/umi-app 安装umi脚手架

    安装qiankun

    1
    yarn add qiankun

    安装@umijs/plugin-qiankun

    1
    yarn add @umijs/plugin-qiankun -D

    在主应用中注册子应用

    在.umirc.ts 文件中 仿照以下代码进行添加
    例如:

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

    这里端口到时候要规定好

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    {
    ...
    qiankun: {
    master: {
    apps: [
    {
    name: 'app-1',
    entry: '//localhost:8001',
    },
    ],
    },
    },
    }

    在主应用中装载子应用(路由)

    指向子应用的路由。
    在 config/config.ts 文件中,仿在 routes 属性下进行添加:

    1
    2
    3
    4
    5
    6
    {
    name: 'app-1',
    icon: 'smile',
    path: '/app-1',
    microApp: 'app-1',
    },

    示例:这是我的.umirc.ts 文件配置 很简单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import { defineConfig } from 'umi';

    export default defineConfig({
    nodeModulesTransform: {
    type: 'none',
    },
    routes: [
    { path: '/', component: '@/pages/index' },
    {
    name: 'app-1',
    icon: 'smile',
    path: '/app-1',
    microApp: 'app-1',
    },
    ],
    fastRefresh: {},
    qiankun: {
    master: {
    apps: [
    {
    name: 'app-1',
    entry: '//localhost:8001',
    },
    ],
    },
    },
    });

    好了,这个时候我们的主应用就意见搭建好了。

    搭建子应用

    yarn create @umijs/umi-app 安装umi脚手架

    安装qiankun

    1
    yarn add @umijs/plugin-qiankun -D

    为了获得更好地本地开发及调试体验,我们建议您提前在子应用中指定应用启动的具体端口号,如通过.env指定

    1
    PORT=8081

    注册刚安装的插件

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

    1
    2
    3
    qiankun: {
    slave: {}
    }

    添加后如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import { defineConfig } from 'umi';

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

    // 使用qiankun插件
    qiankun: {
    slave: {}
    },
    });

    修改工程名称

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

    RPCNwQ.png

    导出相应生命周期钩子

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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);
    },
    };

    到了这里就可以了

    这是我的文件
    RPCJOS.png

    效果:

    主应用

    RPCteg.png

    在主应用中通过路由访问子应用
    RPCOkd.png

    子应用:
    RPCXtA.png

    如果我们希望把子应用在父应用中当组件使用

    可以这样:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import styles from './index.less';
    import { MicroApp } from 'umi';

    export default function IndexPage() {
    return (
    <div>
    {/* 这里的name就是你的子路由名称 引用MicroApp */}
    <MicroApp name="app-1" />

    <h1 className={styles.title}>我是主应用</h1>
    </div>
    );
    }

    效果

    RPCjfI.png

    如上面就当组件显示了

    好了,到了这里,简单的qiankun使用就可以了

    借鉴了这两位的
    https://www.jianshu.com/p/d0f87e1dcacf
    https://www.yuque.com/blueju/blog/huuie8

    上一篇:
    umi之define属性
    下一篇:
    react中三种函数调用方法总结
    本文目录
    本文目录