Umi中的微前端

@umi/max 内置了 Qiankun 微前端插件,它可以一键启用 Qiankun 微前端开发模式,帮助您轻松地在 Umi 项目中集成 Qiankun 微应用,构建出一个生产可用的微前端架构系统。

什么是微前端

       微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。

特性

(1)基于 single-spa 封装,提供了更加开箱即用的 API。

(2)技术栈无关,任意技术栈的应用均可 使用/接入,不论是 React/Vue/Angular/JQuery 还是其他等框架。

(3)HTML Entry 接入方式,让你接入微应用像使用 iframe 一样简单。

(4)样式隔离,确保微应用之间样式互相不干扰。

(5)JS 沙箱,确保微应用之间 全局变量/事件 不冲突。

 (6)资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度。

 (7)umi 插件,提供了 @umijs/plugin-qiankun 供 umi 应用一键切换成微前端架构系统。

核心概念

  • 主应用(基座):整个微前端应用的入口,负责加载和管理子应用。
  • 子应用:独立的前端应用,可以独立开发、独立部署、独立运行。
  • 生命周期:主应用和子应用之间的生命周期钩子,用于控制应用的加载、启动、卸载等过程。
  • 沙箱:用于隔离子应用的 JavaScript 执行环境,防止子应用之间的冲突和污染。
  • 应用间通信:主应用和子应用之间的通信机制,用于实现数据共享和事件传递。

实例

(1)umi创建父应用及子应用

       创建文件夹test,vscode打开该文件夹,终端输入命令pnpm dlx create-umi@latest,输入父或子应用名称 回车,选择 简单应用程序 一项 回车,选择Npm客户端 回车,选择Npm注册表(建议使用taobao)回车,创建应用程序。

(2)配置父应用,注册子应用的相关信息

有两种方式:

  • 插件注册子应用。
  • 运行时注册子应用。

演示第一种方式--插件注册子应用,其余一种方式见:微前端

// .umirc.ts
import { defineConfig } from "umi";export default defineConfig({plugins: ['@umijs/plugins/dist/qiankun'],qiankun: {master: {apps: [{name: 'zi-app',                // 子应用的名称entry: '//localhost:8001',     // 子应用运行的 HTTP 地址},],},},routes: [{ path: "/", component: "index"},{ path: "/docs", component: "docs" },],npmClient: 'pnpm',
});

注:该应用程序创建时模版选择的为简单应用程序,在普通的 Umi 应用中,默认不附带任何插  件 ,如需使用 Max 的功能(如 数据流、antd、qiankun’等),需要手动安装插件并开启他们。

a.   cd到当前文件夹下  

b.   下载 @umijs/plugins    命令:pnpm add -D @umijs/plugins

c.    开启qiankun插件    

(3)配置子应用,子应用需要导出必要的生命周期钩子,供父应用在适当的时机调用

// .umirc.ts
import { defineConfig } from "umi";export default defineConfig({plugins: ['@umijs/plugins/dist/qiankun'],qiankun: {slave: {},},routes: [{ path: "/", component: "index" },{ path: "/docs", component: "docs" },],npmClient: 'pnpm',
});

这样,微前端插件会自动在项目中创建好 Qiankun 子应用所需的生命周期钩子和方法

注:同(2)下载插件开启qiankun插件

 (4)引入子应用

  • 路由绑定引入子应用。

  • <MicroApp /> 组件引入子应用。

  • <MicroAppWithMemoHistory /> 组件引入子应用。

演示第一种方式--路由绑定引入子应用,其余两种方式见:微前端

// .umirc.ts
import { defineConfig } from "umi";export default defineConfig({plugins: ['@umijs/plugins/dist/qiankun'],qiankun: {master: {apps: [{name: 'zi-app',                entry: '//localhost:8001',     },],},},routes: [{ path: "/", component: "index",routes:[                 //二级路由{path: '/zi-app/*',   // 带上*通配符意味着将 /zi-app/ 下所有子路由都关联给微应用zi-appmicroApp: 'zi-app',},]},{ path: "/docs", component: "docs" },],npmClient: 'pnpm',
});

配置好后,子应用的路由 base 会在运行时被设置为主应用中配置的 path

(5)父应用   

创建二级路由跳转link

// layouts/index.tsx
import { Link, Outlet } from 'umi';
import styles from './index.less';export default function Layout() {return (<div className={styles.navs}><ul><li><Link to="/">home</Link></li><li><Link to="/zi-app">二级</Link></li></ul><Outlet /></div>);
}

二级路由出口设置

// pages/index.tsximport { Outlet } from 'umi';export default function HomePage() {return (<div><span>xxxxxxxx</span><Outlet/></div>);
}

(6)子应用--配置子应用名称

// package.json
{"private": true,"author": "xxxx","name": "zi-app",       // 设置子应用的名称,与父应用配置的子应用名称相同"scripts": {"dev": "umi dev","build": "umi build","postinstall": "umi setup","setup": "umi setup","start": "npm run dev"},"dependencies": {"umi": "^4.3.24"},"devDependencies": {"@types/react": "^18.0.33","@types/react-dom": "^18.0.11","@umijs/plugins": "^4.3.24","typescript": "^5.0.3"}
}

结果演示

前提:pnpm dev 启动父子应用

http://localhost:8000/

点击 二级 加载子应用    http://localhost:8000/zi-app

过程中遇到的问题

(1)报错Invalid config keys: qiankun

解决方法:

(2)报错You should have name in package.json

解决方法:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/443625.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

golang grpc初体验

grpc 是一个高性能、开源和通用的 RPC 框架&#xff0c;面向服务端和移动端&#xff0c;基于 HTTP/2 设计。目前支持c、java和go&#xff0c;分别是grpc、grpc-java、grpc-go&#xff0c;目前c版本支持c、c、node.js、ruby、python、objective-c、php和c#。grpc官网 grpc-go P…

【牛客刷题实战】BC120 争夺前五名

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 牛客题目&#xff1a; BC120 争夺前五名 题目描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 示例2 解题思路&#xff1a; 具体思路&#xff1a; 题目要点&#xff1a; 完整代码&#xff1a; 兄弟们共…

python爬虫 - 数据提取

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、数据类型及其对应的提取策略 &#xff08;一&#xff09;文本数据 &…

【设计模式】软件设计原则——开闭原则里氏替换单一职责

开闭原则内容引出 开闭原则 定义&#xff1a;一个软件实体&#xff0c;类&#xff0c;函数&#xff0c;模块&#xff1b;对扩展开放&#xff0c;对修改关闭。用抽象构建框架&#xff0c;用实现扩展细节。可以提高软件的可复用性和可维护性。 开发新功能时&#xff0c;尽量不修…

猿人学— 第一届第1题(解题思路附源码)

猿人学 — 第一届第1题&#xff08;解题思路附源码&#xff09; F12进入开发者工具—> 发现停止在debugger处 —> 右键点击Never pause here后下一步 翻页&#xff0c;抓包后发现请求携带page和m两个参数&#xff0c;page应该就是页数&#xff0c;m则需要逆向 依次查…

微服务中传递公共参数,在网关层header添加参数,各子微服务,openfeign,线程池等地方拿到网关传递过来的参数

需求&#xff1a; 网关层在header中添加参数&#xff0c;header-user_id1001&#xff0c;header-user_name小明 各个子微服务&#xff0c;可以通过openfeign&#xff0c;线程池等方式拿到上面的参数1 网关层 gateway添加需要传递的参数信息 import cn.hutool.core.net.URLEnco…

MySQL从0到1基础语法笔记(下)

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 多表问题分析&#xff1a; 部门数据可以直接删除&#xff0c;然后还有部分员工…

Python对PDF文件的合并操作

在处理 PDF 文件时&#xff0c;合并多个 PDF 文件为一个单一文件或者将某个单一文件插入某个PDF文件是一个常见的需求。Python 提供了多种库来实现这一功能&#xff0c;其中 PyPDF2 是一个非常流行的选择。该库提供了简单易用的接口&#xff0c;包括 merge() 方法&#xff0c;可…

Linux系统和数据库常用的命令2

Linux系统和数据库常用的命令2 1、两台Linux机器ssh免密登录 client端登录server端需要免密&#xff0c;只需把公钥发送到server就可&#xff0c;会在server端生成一个authorized_keys文件 # 108机器上[rootclient ~]# ssh-keygen -t rsa // 非对称算法 Generating public/…

全闪 SDS 一体机提供 FC 能力承载医院核心业务

邹平市人民医院使用 X3000 SDS 一体机组建分布式存储集群&#xff0c;通过 FC 接口 与 VMware 集群连接&#xff0c;以全闪池承载核心业务&#xff0c;对象存储承载 PACS 数据&#xff0c;实现存储架构的升级改造。 “新医改”的不断推进&#xff0c;对医院的运营管理、服务质…

基础教程 | 用VuePress搭建一个简单的个人博客(附源码)

先附上自己个人博客页面&#xff1a;https://illusionno.github.io/ 源码也在这里&#xff1a;https://github.com/illusionno/my-blog &#xff08;如果觉得有帮助&#xff0c;可以点颗star✨&#xff09; 使用的主题是vuepress-theme-reco2.x&#xff0c;并在上面进行了一些调…

红外变电站分割数据集,标注为json格式,总共有5类,避雷器(289张),绝缘子(919张),电流互感器(413张),套管(161张),电压互感器(153张)

红外变电站分割数据集&#xff0c;标注为json格式&#xff0c;总共有5类 避雷器&#xff08;289张&#xff09;&#xff0c;绝缘子&#xff08;919张&#xff09;&#xff0c;电流互感器&#xff08;413张&#xff09;&#xff0c;套管&#xff08;161张&#xff09;&#xff0…

【星汇极客】单片机竞赛之2024睿抗机器人大赛-火线速递赛道(持续更新)

前言 本人是一名嵌入式学习者&#xff0c;在大学期间也参加了不少的竞赛并获奖&#xff0c;包括&#xff1a;江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三等。 暑假的时候参加了太多的比赛&#…

设备多久(60/50/40min)未上报,类似场景发送通知实现方案

场景描述 设备比较多&#xff0c;几十万甚至上百万&#xff0c;设备在时不时会上报消息。 用户可以设置设备60分钟、50分钟、40分钟、30分钟未上报数据&#xff0c;发送通知给用户&#xff0c;消息要及时可靠。 基本思路 思路&#xff1a; 由于设备在一直上报&#xff0c;如果…

Airtest脚本的重构与优化:提升测试效率和可读性

在自动化测试的工作里&#xff0c;编写高效且易于维护的测试脚本是一项挑战&#xff0c;尤其是在应对复杂的测试场景时。Airtest作为一款常用的自动化测试工具&#xff0c;它提供了丰富的API和灵活的脚本编写方式&#xff0c;帮助测试人员高效地开展UI自动化测试。然而&#xf…

Linux的环境与历史

目录 引言 1. Linux 背景介绍 2. 开源 3. 官网 4. 企业应用现状 5. 发行版本 6.见见猪跑 引言 在这个信息化时代&#xff0c;掌握一门操作系统技能显得尤为重要。Linux作为一款开源、稳定且功能强大的操作系统&#xff0c;不仅在服务器领域占据主导地位&#xff0c;也逐渐…

哈希表结构

哈希表结构&#xff1a;数组链表 案例一&#xff1a;HashSet集合的常见使用方法 package com.collection;import java.util.HashSet; import java.util.Iterator;/*** HashSet集合的使用* 存储结构&#xff1a;哈希表(数组链表红黑树)*/ public class Demo07 {public static v…

性能测试学习6:jmeter安装与基本配置/元件/线程组介绍

一.JDK安装 官网&#xff1a;https://www.oracle.com/ 二.Jmeter安装 官网&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 下载zip包&#xff0c;zip后缀那个才是Windows系统的jmeter 三.Jmeter工作目录介绍 四.Jmeter功能 1&#xff09;修改默认配置-汉化 2&am…

SapGUI For Windows捕获技术

一、SapGUI For Windows捕获技术 文章目录 一、SapGUI For Windows捕获技术SAP GUI:SAP NetWeaver Business Client:SAP Fiori:二.Sap的自动化配置SAP客户端配置三.Sap GUI自动化脚本四.Sap GUI自动化开发SAP GUI: SAP图形用户界面,是最常用的SAP前端界面。它是一个桌面应…

React(一) 认识React、熟悉类组件、JSX书写规范、嵌入变量表达式、绑定属性

文章目录 一、初始React1. React的基本认识2. Hello案例2.1 三个依赖2.2 渲染页面2.3 hello案例完整代码 二、类组件1. 封装类组件2. 组件里的数据3. 组件里的函数 (重点)4. 案例练习(1) 展示电影列表 三、JSX语法1. 认识JSX2. JSX书写规范及注释3. JSX嵌入变量作为子元素4. JS…