目录

1.qiankun 两种集成微应用的方法

2.基于路由配置微应用

1.1 registerMicroApps(apps, lifeCycles?) 注册微应用配置信息

参数

类型

用法

1.2 start(opts?) 启动 qiankun

参数

类型

用法

3.手动加载微应用

3.1 loadMicroApp(app, configuration?) 手动加载微应用

参数

返回

用法

3.2 prefetchApps(apps, importEntryOpts?)  手动预加载指定的微应用静态资源

参数

类型

用法


1.qiankun 两种集成微应用的方法

qiankun 有两种集成微应用的方法,分别是:基于路由配置微应用、手动加载微应用

  • “基于路由配置微应用” 只能加载 一个 微应用
  • 同时加载多个微应用时,需要配合 “手动加载微应用” 一起使用

如果既有 基于路由配置的微应用,又有 手动加载的微应用,那么 手动加载的微应用 中,不能使用路由

常见问题 - qiankunhttps://qiankun.umijs.org/zh/faq#

2.基于路由配置微应用

通过 将微应用关联到一些 url 规则 的方式,实现当浏览器 url 发生变化时,自动加载相应的微应用

API 说明 - qiankunhttps://qiankun.umijs.org/zh/api#

1.1 registerMicroApps(apps, lifeCycles?) 注册微应用配置信息

API 说明 - qiankunhttps://qiankun.umijs.org/zh/api#registermicroappsapps-lifecycles

参数

apps - Array<RegistrableApp> - 必选,微应用的一些注册信息

lifeCycles - LifeCycles - 可选,全局的微应用生命周期钩子

类型

RegistrableApp

  • name - 必选,微应用的名称,微应用之间必须确保唯一
  • entry - 必选,微应用的入口
  • container - 必选,微应用挂载的容器节点。如container: '#root'
  • activeRule - 必选,微应用的激活规则
  • props - object - 可选,主应用需要传递给微应用的数据

LifeCycles

  • beforeLoad - 可选
  • beforeMount - 可选
  • afterMount - 可选
  • beforeUnmount - 可选
  • afterUnmount - 可选

用法

注册微应用的基础配置信息

当浏览器 url 发生变化时,会自动检查每一个微应用注册的 activeRule 规则

符合规则的应用,将会被自动激活

import { registerMicroApps } from 'qiankun';

registerMicroApps(
  [
    {
      name: 'app1',
      entry: '//localhost:8080',
      container: '#container',
      activeRule: '/react',
      props: {
        name: 'kuitos',
      },
    },
  ],
  {
    beforeLoad: (app) => console.log('before load', app.name),
    beforeMount: [(app) => console.log('before mount', app.name)],
  },
);

 

1.2 start(opts?) 启动 qiankun

API 说明 - qiankunhttps://qiankun.umijs.org/zh/api#startopts

参数

opts - Options 可选

类型

Options

  • prefetch - 可选,是否开启预加载,默认为 true
  • sandbox - 可选,是否开启沙箱,默认为 true

用法

启动 qiankun

import { start } from 'qiankun';

start();

3.手动加载微应用

适用于 手动加载 / 手动卸载 一个微应用的场景

API 说明 - qiankunhttps://qiankun.umijs.org/zh/api#%E6%89%8B%E5%8A%A8%E5%8A%A0%E8%BD%BD%E5%BE%AE%E5%BA%94%E7%94%A8

3.1 loadMicroApp(app, configuration?) 手动加载微应用

参数

app - 必选,微应用的基础信息

  • name - 必选,微应用的名称,微应用之间必须确保唯一
  • entry - 必选,微应用的入口
  • container - 必选,微应用挂载的容器节点。如container: '#root'
  • props - object - 可选,主应用需要传递给微应用的数据

configuration - 可选,微应用的配置信息

  • sandbox - 可选,是否开启沙箱,默认为 true

返回

返回一个微应用实例

  • mount(): Promise<null>;
  • unmount(): Promise<null>;
  • update(customProps: object): Promise<any>;
  • getStatus(): | "NOT_LOADED" | "LOADING_SOURCE_CODE" | "NOT_BOOTSTRAPPED" | "BOOTSTRAPPING" | "NOT_MOUNTED" | "MOUNTING" | "MOUNTED" | "UPDATING" | "UNMOUNTING" | "UNLOADING" | "SKIP_BECAUSE_BROKEN" | "LOAD_ERROR";
  • loadPromise: Promise<null>;
  • bootstrapPromise: Promise<null>;
  • mountPromise: Promise<null>;
  • unmountPromise: Promise<null>;

用法

手动加载一个微应用

<template>
  <div class="home">
    <button @click="loadApp">手动加载微应用 vue</button>
    <button @click="unloadApp">手动卸载微应用 vue</button>
    
    <!-- 存放微应用的容器 -->
    <div id="hand-micro-app"></div>
  </div>
</template>

<script lang="ts">
import { defineComponent } from 'vue';
import { loadMicroApp } from 'qiankun';

export default defineComponent({
  name: 'Home',
  setup() {
    // 微应用实例
    let microApp:any = null; // 微应用实例
    
    /**
     * 加载app
     */
    const loadApp = () => {
      microApp = loadMicroApp({
        name: 'qiankun-vue2',
        entry: '//localhost:8082',
        container: '#hand-micro-app'
      });
    };

    /**
     * 卸载app
     */
    const unloadApp = () => {
      if (microApp) {
        microApp.unmount(); // 卸载微应用
      }
    };

    return {
      loadApp,
      unloadApp,
    };
  }
})
</script>

3.2 prefetchApps(apps, importEntryOpts?)  手动预加载指定的微应用静态资源

参数

  • apps - AppMetadata[] - 必选 - 预加载的应用列表
  • importEntryOpts - 可选 - 加载配置

类型

AppMetadata

  • name - string - 必选 - 应用名
  • entry - string | { scripts?: string[]; styles?: string[]; html?: string } - 必选,微应用的 entry 地址

用法

手动预加载指定的微应用静态资源

仅 手动加载微应用 需要,基于路由配置微应用 不需要此方法

如果是 基于路由配置微应用,直接配置 prefetch 属性即可

import { prefetchApps } from 'qiankun';

prefetchApps([
  { name: 'app1', entry: '//locahost:7001' },
  { name: 'app2', entry: '//locahost:7002' },
]);

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐