# umi-plugin-qiankun **Repository Path**: giteeforjing/umi-plugin-qiankun ## Basic Information - **Project Name**: umi-plugin-qiankun - **Description**: 蚂蚁的微前端构架,qiankun - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 8 - **Created**: 2020-02-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # @umijs/plugin-qiankun Umi plugin for [qiankun](https://github.com/umijs/qiankun). [](https://npmjs.org/package/@umijs/plugin-qiankun) [](https://travis-ci.org/umijs/umi-plugin-qiankun) [](https://npmjs.org/package/@umijs/plugin-qiankun) ## Installation ```shell $ npm i @umijs/plugin-qiankun -S ``` or ```shell $ yarn add @umijs/plugin-qiankun ``` ## Examples 导航是主应用,App1 和 App2 是子应用,  ```bash $ yarn $ yarn build $ yarn start ``` ## Features - ✔︎ 基于 qiankun - ✔︎ 支持主应用和子应用都用 umi - ✔︎ 支持主子应用 browser、hash 等多种 history 模式 - ✔︎ 父子应用通讯 - ✔︎ 子应用运行时配置自定义 `bootstrap()`、`mount()` 和 `unmount()` - ✔︎ 主应用、子应用联调 ## Usage ### 主应用 #### 构建期 ```js export default { plugins: [ [ '@umijs/plugin-qiankun', { master: { // 注册子应用信息 apps: [ { name: 'app1', // 唯一 id entry: '//localhost:7001', // html entry base: '/app1', // app1 的路由前缀,通过这个前缀判断是否要启动该应用,通常跟子应用的 base 保持一致 history: 'browser', // 子应用的 history 配置,默认为当前主应用 history 配置 }, { name: 'app2', entry: { // TODO 支持 config entry scripts: [], styles: [], }, base: '/app2', }, ], jsSandbox: true, // 是否启用 js 沙箱,默认为 false prefetch: true, // 是否启用 prefetch 特性,默认为 true }, }, ], ], }; ``` #### 运行时 ```js export default { plugins: [ ['@umijs/plugin-qiankun', { master: {} }] }; ``` ##### 1. src/app.js 里配置 ```js // 值是一个 promise export const qiankun = fetch('/config').then(() => ({ // 注册子应用信息 apps: [ { name: 'app1', // 唯一 id entry: '//localhost:7001', // html entry base: '/app1', // app1 的路由前缀,通过这个前缀判断是否要启动该应用,通常跟子应用的 base 保持一致 history: 'browser', // 子应用的 history 配置,默认为当前主应用 history 配置 }, { name: 'app2', entry: { // TODO 支持 config entry scripts: [], styles: [], }, base: '/app2', }, ], jsSandbox: true, // 是否启用 js 沙箱,默认为 false prefetch: true, // 是否启用 prefetch 特性,默认为 true lifeCycles: { // see https://github.com/umijs/qiankun#registermicroapps afterMount: props => { console.log(props); }, }, // ...even more options qiankun start() supported, see https://github.com/umijs/qiankun#start })); ``` ##### 2. 添加子应用路由 由于 umi 不支持在应用 render 之后修改路由,故运行时配置方式插件无法自动生成子应用相关路由,(见[代码](https://github.com/umijs/umi-plugin-qiankun/blob/master/src/master/index.ts#L34))。所以这里需要用户手动添加子应用相关路由配置避免 404 情况: ###### 2.1 主应用新建 pages/subAppContainer.js ```js import React from 'react'; export default function() { return
; } ``` ###### 2.2 新建 pages/subAppContainer.js ```js // 主应用 config.js 中添加子应用相关路由配置 export default { routes: [ { path: '/app1', exact: true, component: 'subAppContainer' }, { path: '/app2', exact: true, component: 'subAppContainer' }, ], }; ``` ### 配置列表 | 配置 | 说明 | 类型 | 是否必填 | 默认值 | | --- | --- | --- | --- | --- | | apps | 子应用配置 | App[] | 是 | | | jsSandbox | 是否启用 js 沙箱 | boolean | 否 | false | | prefetch | 是否启用 prefetch 特性 | boolean | 否 | true | | defer | 是否异步渲染,比如子应用的 mountElementId 依赖主应用生成的节点,而主应用生成该节点的过程是异步的。