微前端 - 以无界为例


一、微前端核心概念

微前端是一种将单体前端应用拆分为多个独立子应用的架构模式,每个子应用可独立开发、部署和运行,具备以下特点:

  1. 技术栈无关性:允许主应用和子应用使用不同框架(如 React + Vue)。
  2. 独立部署:子应用独立构建、测试和发布,互不影响。
  3. 沙箱隔离:通过 JavaScript/CSS 沙箱避免全局污染。
  4. 动态加载:按需加载子应用资源,提升性能。

二、无界框架核心机制

无界(Wujie) 是腾讯开源的微前端框架,核心优势:
基于 Web Components:天然支持样式隔离。
Iframe 沙箱:实现 JS 执行环境的完全隔离。
子应用保活:切换页面时保留子应用状态,避免重复渲染。
通信简化:内置 props 传递和事件总线机制。


三、实战示例:React 主应用 + Vue 子应用

略复杂的demo

1. 主应用(React)配置

步骤说明:主应用负责路由管理和子应用容器渲染。

// 主应用:src/App.jsx
import React from 'react';
import { WujieReact } from "wujie-react";function App() {return (<div>{/* 导航菜单 */}<nav><Link to="/vue-app">Vue 子应用</Link><Link to="/react-app">React 子应用</Link></nav>{/* Vue 子应用容器 */}<WujieReactname="vueApp" url="http://localhost:3001" sync={true}props={{ user: { name: "Alice" } }}/>{/* React 子应用容器 */}<WujieReactname="reactApp"url="http://localhost:3002"sync={true}/></div>);
}export default App;
2. Vue 子应用配置

关键点:适配无界生命周期,接收主应用传递的 props

// Vue 子应用:src/main.js
import { createApp } from 'vue';
import App from './App.vue';if (window.__POWERED_BY_WUJIE__) {// 无界环境:挂载到无界提供的容器window.__WUJIE_MOUNT = () => {const app = createApp(App);// 接收主应用传递的 propsapp.config.globalProperties.$wujieProps = window.$wujie.props;app.mount('#app');};// 子应用卸载时清理window.__WUJIE_UNMOUNT = () => {app.unmount();};
} else {// 独立运行模式createApp(App).mount('#app');
}
3. React 子应用配置
// React 子应用:src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';if (window.__POWERED_BY_WUJIE__) {// 无界环境挂载window.__WUJIE_MOUNT = () => {ReactDOM.render(<App />, document.getElementById('root'));};window.__WUJIE_UNMOUNT = () => {ReactDOM.unmountComponentAtNode(document.getElementById('root'));};
} else {// 独立运行ReactDOM.render(<App />, document.getElementById('root'));
}

四、跨框架通信示例

1. 主应用向子应用传递数据(Props)
// 主应用传递动态数据
<WujieReactname="vueApp"url="http://localhost:3001":props="{ user: currentUser,onUpdate: (data) => console.log('收到子应用数据:', data) }"
/>
2. Vue 子应用接收并使用 Props
<!-- Vue 子应用组件 -->
<template><div><h2>用户: {{ $wujieProps.user.name }}</h2><button @click="sendToMain">发送数据到主应用</button></div>
</template><script>
export default {methods: {sendToMain() {// 调用主应用传递的回调函数this.$wujieProps.onUpdate({ message: '来自 Vue 的数据' });}}
}
</script>
3. React 子应用与主应用通信
// React 子应用组件
import { useEffect } from 'react';export default function ReactApp() {// 接收主应用数据const user = window.$wujie?.props.user;// 向主应用发送事件const handleClick = () => {window.$wujie?.bus.emit('react-event', { time: Date.now() });};return (<div><p>主应用用户: {user?.name}</p><button onClick={handleClick}>触发事件</button></div>);
}

五、构建与部署配置

1. 子应用 Webpack 配置(Vue)
// vue.config.js
module.exports = {publicPath: process.env.NODE_ENV === 'production' ? 'http://cdn.com/vue-app/' : '/',devServer: {headers: {'Access-Control-Allow-Origin': '*' // 允许跨域}}
};
2. 子应用 Webpack 配置(React)
// config-overrides.js (使用 react-app-rewired)
module.exports = {webpack: (config) => {config.output.library = 'reactApp';config.output.libraryTarget = 'umd';config.output.publicPath = process.env.NODE_ENV === 'production' ? 'http://cdn.com/react-app/' : 'http://localhost:3002/';return config;},devServer: (config) => {config.headers = { 'Access-Control-Allow-Origin': '*' };return config;}
};

六、无界框架核心优势对比

功能无界 (Wujie)qiankun
隔离机制Web Components + iframe 双重沙箱Proxy 代理 + 样式重写
通信方式Props + EventBus + URL 同步全局状态管理(如 Redux)
子应用保活✅ 支持(保留 DOM 和状态)❌ 每次切换重新挂载

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

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

相关文章

企业级日志分析平台: ELK 集群搭建指南

前言&#xff1a;在当今数字化时代&#xff0c;数据已经成为企业决策的核心驱动力。无论是日志分析、用户行为追踪&#xff0c;还是实时监控和异常检测&#xff0c;高效的数据处理和可视化能力都至关重要。ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;作为全球…

1.2-WAF\CDN\OSS\反向代理\负载均衡

WAF&#xff1a;就是网站应用防火墙&#xff0c;有硬件类、软件类、云WAF&#xff1b; 还有网站内置的WAF&#xff0c;内置的WAF就是直接嵌在代码中的安全防护代码 硬件类&#xff1a;Imperva、天清WAG 软件&#xff1a;安全狗、D盾、云锁 云&#xff1a;阿里云盾、腾讯云WA…

MybatisPlus(SpringBoot版)学习第四讲:常用注解

目录 1.TableName 1.1 问题 1.2 通过TableName解决问题 1.3 通过全局配置解决问题 2.TableId 2.1 问题 2.2 通过TableId解决问题 2.3 TableId的value属性 2.4 TableId的type属性 2.5 雪花算法 1.背景 2.数据库分表 ①垂直分表 ②水平分表 1>主键自增 2>取…

第二届计算机网络和云计算国际会议(CNCC 2025)

重要信息 官网&#xff1a;www.iccncc.org 时间&#xff1a;2025年4月11-13日 地点&#xff1a;中国南昌 简介 第二届计算机网络和云计算国际会议&#xff08;CNCC 2025&#xff09;将于2025年4月11-13日在中国南昌召开。围绕“计算机网络”与“云计算”展开研讨&#xff…

【大模型基础_毛玉仁】5.4 定位编辑法:ROME

目录 5.4 定位编辑法&#xff1a;ROME5.4.1 知识存储位置1&#xff09;因果跟踪实验2&#xff09;阻断实验 5.4.2 知识存储机制5.4.3 精准知识编辑1&#xff09;确定键向量2&#xff09;优化值向量3&#xff09;插入知识 5.4 定位编辑法&#xff1a;ROME 定位编辑&#xff1a;…

横扫SQL面试——连续性登录问题

横扫SQL面试 &#x1f4cc; 连续性登录问题 在互联网公司的SQL面试中&#xff0c;连续性问题堪称“必考之王”。&#x1f4bb;&#x1f50d; 用户连续登录7天送优惠券&#x1f31f;&#xff0c;服务器连续报警3次触发熔断⚠️&#xff0c;图书馆连续3天人流破百开启限流⚡” …

Spring AI Alibaba 对话记忆使用

一、对话记忆 (ChatMemory)简介 1、对话记忆介绍 ”大模型的对话记忆”这一概念&#xff0c;根植于人工智能与自然语言处理领域&#xff0c;特别是针对具有深度学习能力的大型语言模型而言&#xff0c;它指的是模型在与用户进行交互式对话过程中&#xff0c;能够追踪、理解并利…

vdi模式是什么

‌VDI模式&#xff08;Virtual Desktop Infrastructure&#xff09;是一种基于服务器的计算模型&#xff0c;其核心思想是将所有计算和存储资源集中在服务器上&#xff0c;用户通过前端设备&#xff08;如瘦客户机&#xff09;访问服务器上的虚拟桌面‌‌ VDI模式的工作原理 在…

【分布式】深入剖析 Sentinel 限流:原理、实现

在当今分布式系统盛行的时代&#xff0c;流量的剧增给系统稳定性带来了巨大挑战。Sentinel 作为一款强大的流量控制组件&#xff0c;在保障系统平稳运行方面发挥着关键作用。本文将深入探讨 Sentinel 限流的原理、实现方案以及其优缺点&#xff0c;助力开发者更好地运用这一工具…

c#winform,倒鸭子字幕效果,typemonkey字幕效果,抖音瀑布流字幕效果

不废话 直接上效果图 C# winform 开发抖音的瀑布流字幕。 也是typemonkey插件字幕效果 或者咱再网上常说的倒鸭子字幕效果 主要功能 1&#xff0c;软件可以自定义添加字幕内容 2&#xff0c;软件可以添加字幕显示的时间区间 3&#xff0c;可以自定义字幕颜色&#xff0c;可以随…

Pycharm(八):字符串切片

一、字符串分片介绍 对操作的对象截取其中一部分的操作&#xff0c;比如想要获取字符串“888666qq.com前面的qq号的时候就可以用切片。 字符串、列表、元组都支持切片操作。 语法&#xff1a;字符串变量名 [起始:结束:步长] 口诀&#xff1a;切片其实很简单&#xff0c;只顾头来…

图片解释git的底层工作原理

&#xff08;图片来源&#xff1a;自己画的&#xff09; 基于同一个commit创建新分支 &#xff08;图片来源&#xff1a;书籍《Linux运维之道》 ISBN 9787121461811&#xff09; 在新分支上修改然后commit一次 &#xff08;图片来源&#xff1a;书籍《Linux运维之道》 ISBN 978…

leetcode994.腐烂的橘子

思路源自 【力扣hot100】【LeetCode 994】腐烂的橘子&#xff5c;多源BFS 这里图中的腐烂的的橘子是同时对周围进行腐化&#xff0c;所以采用多源bfs就能解决 多源bfs与单源bfs的区别就在于队列取出时一轮是取出队列当中的全部元素 class Solution {public int orangesRotti…

【华为OD技术面试真题 - 技术面】- Java面试题(15)

华为OD面试真题精选 专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录 介绍下TCP/UDP TCP(传输控制协议)和 UDP(用户数据报协议) TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种常见的传输层协议,主要…

‌在 Fedora 系统下备份远程 Windows SQL Server 数据库的完整方案

‌一、环境准备与工具安装‌ ‌1. 安装 Microsoft SQL Server 命令行工具‌ Fedora 需安装 mssql-tools 和 ODBC 驱动&#xff1a; # 添加 Microsoft 仓库 sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo# 安装工具包 …

DeepSeek:巧用前沿AI技术,开启智能未来新篇章

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术迅猛发展&#xff0c;大模型成为全球科技竞争的核心赛道。在这场AI革命中&#xff0c;DeepSeek作为中国领先的大模型研发团队&#xff0c;凭借其创新的技术架构、高效的训练方法和广泛的应用场景&#xff0c;迅…

R语言实现轨迹分析--traj和lcmm包体会

R语言实现轨迹分析–traj和lcmm包体会 轨迹分析是对重复测量数据的一种归纳&#xff0c;转化为一种分类变量&#xff0c;比如手术后1&#xff5e;7天内的疼痛评分&#xff0c;可以形成术后急性痛轨迹。形成的轨迹作为一个分类变量&#xff0c;可以用于预测疾病的预后&#xff…

Vue 3 事件总线详解:构建组件间高效通信的桥梁

Vue 3 事件总线详解&#xff1a;构建组件间高效通信的桥梁 为什么需要事件总线&#xff1f;使用 mitt 实现事件总线1. 安装 mitt2. 创建事件总线3. 在组件中使用事件总线发送端组件&#xff08;例如 ComponentA.vue&#xff09;接收端组件&#xff08;例如 ComponentB.vue&…

MySQL的基础语法1(增删改查、DDL、DML、DQL和DCL)

目录 一、基本介绍 二、SQL通用语法 三、SQL分类(DDL、DML、DQL、DCL) 1.DDL 1.1数据库操作 1.2表操作 1.2.1表操作-查询创建 1.2.2表操作-数据类型 1&#xff09;数值类型 2&#xff09;字符串类型 3&#xff09;日期时间类型​编辑 4&#xff09;表操作-案例 1.2.3…

【NLP】15. NLP推理方法详解 --- 动态规划:序列标注,语法解析,共同指代

动态规划 (Dynamic Programming) 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种通过将问题分解为较小子问题来优化计算效率的技术。它特别适用于优化最优解问题&#xff0c;比如序列标注&#xff08;sequence tagging&#xff09;这类任务。…