qiankun的使用

qiankun

本文档主要对qiankun进行一个整体性的概述,让开发者有一个系统的主应用,微应用的概念,加快对框架的理解使用。

微前端概念示意图

在这里插入图片描述

qiankun简单介绍

下图是qiankun开发团队对微前端的提出的方案设计,最终产出物就是qiankun
在这里插入图片描述

  • 基于 single-spa 封装,提供了更加开箱即用的 API
  • 技术栈无关,任意技术栈的应用均可 使用/接入,不论是 React/Vue/Angular/JQuery 还是其他等框架。
  • HTML Entry 接入方式。接入微应用像使用 iframe 一样简单
  • 样式隔离,确保微应用之间样式互相不干扰。
  • JS 沙箱,确保微应用之间 全局变量/事件 不冲突。
  • 资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度。
  • umi 插件,提供了 @umijs/plugin-qiankun 供 umi 应用一键切换成微前端架构系统。

使用场景

  • 项目很多,规模很大,都是每个项目独立使用git此类仓库维护的、技术栈为vue/react/angular的这类应用
  • 需要整合到统一平台上,你正在寻找可能比iframe更合适的替代方案
  • 项目A有功能A1、A2、A3,项目B有功能B1、B2、B3,产品经理要你把A2、B1、B3组合成一个包含这些功能的新项目

基本使用方式

主应用与微应用

  • 直观来讲,上面示意图中的某平台代表的就是主应用,项目A,项目B...等代表各个子应用。
  • 主应用应该是包含了系统中的公共部分例如:菜单栏、登录、退出等功能;
  • 微应用则是为满足业务需求所开发的多数子项目,需要区分的是微应用和组件的区别,组件是为了满足单一模块的功能,组件组件之间可以根据业务进行通信等,而微应用则是一个完整独立的项目,所以如果关联紧密存在频繁通信的嘤应用应该做成一个微应用。

生命周期

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

  • bootstrap:只会在微应用初始化的时候调用一次,下次微应用重新进入时会直接调用 mount 钩子,不会再重复触发 bootstrap。通常可以在这里做一些全局变量的初始化,比如不会在 unmount 阶段被销毁的应用级别的缓存等

    export async function bootstrap() {
      console.log('react app bootstraped');
    }
    
  • mount: 应用每次进入都会调用 mount 方法,通常在这里触发应用的渲染方法

    export async function mount(props) {
      console.log(props);
      ReactDOM.render(<App />, document.getElementById('react15Root'));
    }
    
  • unmount: 应用每次 切出/卸载 会调用的方法,通常在这里卸载微应用的应用实例

    export async function update(props) {
      console.log('update props', props);
    }
    

项目通信

  • qiankun提供: initGloabalState(state) 定义全局状态,并返回通信方法,官方建议在主应用使用,微应用通过 props 获取通信方法。

  • 简单示例:

    主应用:

    import { initGloabalState, MicroAppStateActions } from 'qiankun';
    
    // 初始化 state
    const actions: MicroAppStateActions = initGloabalState(state);
    
    actions.onGlobalStateChange((state, prev) => {
      // state: 变更后的状态; prev 变更前的状态
      console.log(state, prev);
    });
    actions.setGlobalState(state);
    actions.offGlobalStateChange();
    

    微应用:

    export async function mount(props) {
      const { container, onGlobalStateChange, setGlobalState } = props;
      onGlobalStateChange((state, prev) => {
        // state: 变更后的状态; prev 变更前的状态
        console.log(state, prev);
      }, true);
      setGlobalState({
        ignore: props.name,
        user: {
          name: props.name,
        },
      });
    }
    

Demo

这里建议本地跑一下官方的Demo,进一步了解

git clone https://github.com/umijs/qiankun.git

需要注意的点

  • 业务关联紧密的功能单元应该做成一个微应用,反之关联不紧密的可以考虑拆分成多个微应用。 一个判断业务关联是否紧密的标准:看这个微应用与其他微应用是否有频繁的通信需求。
  • Vue技术栈的话可能需要处理一些问题,例如:因为多个vue实例在同一个document里,需要避免全局变量污染、全局监听污染、样式污染等,需要制定接入规范等
  • 微应用不宜拆分过细,建议按照业务域来做拆分。
  • 微应用的 package.json 中的 name 字段是否是微应用中唯一的。
  • 由于 qiankun 是通过 fetch 去获取微应用的引入的静态资源的,所以必须要求这些静态资源支持跨域。

以前仅为前期调研过程,后续随着实际应用会持续更新

<think>好的,用户想查找关于乾坤框架(qiankun)的使用教程、指南和示例。我需要整理相关引用中的信息,给出清晰的步骤和示例。首先,我应该回顾提供的引用内容,看看有没有直接相关的教程和示例。 引用[1]提到了一个基于qiankun搭建ng-alain15微前端项目的示例实践,里面有代码示例。这可能是一个实际项目的案例,对用户有帮助。引用[2]是Qiankun微前端框架的入门指南,提到了访问本地服务器查看示例应用,这对用户来说可能是一个好的起点。引用[3]是快速入门教程,详细讲解了项目结构和配置文件,适合新手。引用[4]解析了微前端架构,提到了技术栈如React、Redux等,可能涉及组件层的内容。 接下来,我需要将这些信息组织成结构清晰的步骤。首先介绍快速入门步骤,包括主应用和子应用的配置,然后给出代码示例。可能还需要列出学习资源,包括官方文档和社区资源。同时,生成相关问题,帮助用户深入理解。 需要注意的是,用户可能需要具体的教程链接或示例代码,但引用中没有给出外部链接,所以只能基于现有的引用内容来组织信息。例如,引用[2]中的访问http://localhost:7099可能是一个本地示例,用户需要自行运行项目才能看到。另外,代码示例可能需要从引用中提取,比如引用[1]中的代码部分,但用户提供的引用里并没有具体的qiankun代码,可能需要用一般性的示例来说明。 还要检查是否所有数学公式和独立公式都用了正确的LaTeX格式,但当前问题不涉及数学内容,可能不需要处理这点。最后,确保回答用中文,结构清晰,并附上相关问题。</think>### 乾坤(Qiankun)框架使用指南 #### 一、快速入门步骤 1. **主应用配置** - 安装依赖:`npm install qiankun` - 在主应用中注册子应用,示例代码: ```javascript import { registerMicroApps, start } from 'qiankun'; registerMicroApps([ { name: 'subApp1', entry: '//localhost:7100', container: '#subapp-container', activeRule: '/sub-app1', } ]); start(); ``` 此代码定义了一个子应用`subApp1`,指定其入口地址和激活规则[^2][^3]。 2. **子应用配置** - 子应用需导出生命周期钩子(如`bootstrap`, `mount`, `unmount`): ```javascript export async function bootstrap() { /* 初始化逻辑 */ } export async function mount(props) { /* 挂载逻辑 */ } export async function unmount(props) { /* 卸载逻辑 */ } ``` 确保子应用资源支持跨域访问[^3]。 3. **运行示例** 通过访问本地开发服务器(如`http://localhost:7099`),可查看主应用与子应用的集成效果[^2]。 #### 二、核心概念与最佳实践 - **技术栈无关性** 主应用与子应用可使用不同技术栈(如React、Vue、Angular),通过qiankun的沙箱机制隔离[^4]。 - **通信机制** 使用`initGlobalState`定义全局状态,实现主应用与子应用间的数据同步: ```javascript import { initGlobalState } from 'qiankun'; const actions = initGlobalState({ user: 'admin' }); ``` #### 三、学习资源 1. **官方文档** - [Qiankun GitHub仓库](https://github.com/umijs/qiankun) 2. **实践案例** - 引用[^1]中的`ng-alain15`微前端项目示例,演示复杂场景集成。 - 引用[^3]提供的目录结构与配置文件说明,适合快速上手。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值