实现 vuereact 混合开发项目步骤-微前端

news/2024/5/9 0:07:00

微前端是一种将多个小型前端应用组合成一个大型应用的架构方式。它允许团队独立开发、测试、部署和维护应用的各个部分。Vue.js 和 React 是两个流行的前端框架,它们可以在同一微前端架构下协同工作。

一、常规流程

1. 项目规划
确定项目的范围和目标。
设计应用的模块化结构,决定哪些部分使用 Vue 开发,哪些使用 React。
2. 搭建微前端架构
选择一个微前端框架或库,如 Bit、Single-spa 或 qiankun。
创建一个主应用(主框架),它将作为其他应用的宿主。
3. 创建独立应用
Vue 应用:使用 Vue CLI 创建新的 Vue 应用。
React 应用:使用 Create React App 创建新的 React 应用。
4. 定义应用入口和出口
为每个应用定义清晰的入口点和出口点,以便于主应用加载和卸载。
5. 配置路由
如果使用 qiankun,可以利用其提供的 bootstrap、mount、unmount 生命周期钩子进行路由配置。
对于 Single-spa,每个微前端应用可能是一个独立的 SPA,需要单独配置路由。
6. 通信机制
实现应用间的通信机制,如事件总线、全局状态管理(如 Redux)、或者通过主应用提供的上下文(context)传递数据。
7. 样式隔离
确保 Vue 和 React 应用的 CSS 是隔离的,避免样式冲突。
8. 构建和部署
配置构建系统(如 Webpack)以支持多应用构建。
部署时,确保每个应用的资源(如 JavaScript、CSS 和图片)都能正确加载。
9. 测试
对每个独立应用进行单元测试和端到端测试。
测试应用间的通信和数据传递是否正常。
10. 性能优化
对每个应用进行性能优化,如代码分割、懒加载等。
优化主应用与微应用之间的加载和切换性能。
11. 文档和规范
编写详细的开发文档和通信协议,确保团队成员理解整个系统的工作方式。
12. 维护和迭代
持续集成和持续部署(CI/CD)以支持应用的独立迭代。
定期审查架构,确保它仍然满足项目的需求。
注意事项
框架差异:Vue 和 React 在内部实现上有所不同,需要特别注意组件间通信和数据管理。
状态共享:如果需要共享全局状态,考虑使用 Redux 或其他状态管理库。
样式隔离:使用 CSS Modules 或 Scoped CSS 来隔离样式,避免冲突。
性能:微前端应用可能会增加页面加载时间,因此性能优化尤为重要。

二、简单案例

步骤 1: 初始化主应用 (React)

首先,使用 create-react-app 初始化一个 React 应用,这个应用将作为主应用:

npx create-react-app main-app
cd main-app
npm start

步骤 2: 创建 Vue 微应用

然后,使用 Vue CLI 创建一个 Vue 应用,这个应用将作为一个微应用:

vue create vue-micro-app
cd vue-micro-app
npm run serve

步骤 3: 配置 qiankun

在主应用中安装 qiankun 并进行配置:npm install qiankun --save
在 main-app/src/index.js 中:import React from 'react';
import ReactDOM from 'react-dom';
import { qiankun } from 'qiankun';
import './index.css';
import App from './App';qiankun().bootstrap(() => {ReactDOM.render(<App />,document.getElementById('root'));
});

步骤 4: 注册 Vue 微应用

在主应用中,使用 qiankun 提供的 API 注册 Vue 微应用:

// main-app/src/App.js
import React from 'react';
import { registerMicroApps, start } from 'qiankun';const App = () => {// 注册 Vue 微应用registerMicroApps([{name: 'vueMicroApp', // 微应用名称entry: '//localhost:4200', // Vue 微应用的入口地址container: '#vue-container', // 微应用挂载点的 CSS 选择器activeRule: '/vue-micro-app', // 微应用的路由规则},]);return (<div><h1>React 主应用</h1><div id="vue-container">Vue 微应用将挂载到这里</div></div>);
};export default App;// 启动 qiankun
start();

确保在 main-app/public/index.html 中添加一个容器元素:


<div id="root"><!-- React 主应用内容 --><div id="vue-container"></div>
</div>

步骤 5: 配置 Vue 微应用

在 Vue 微应用中,安装 qiankun 并进行配置:

cd vue-micro-app
npm install qiankun --save

在 vue-micro-app/src/main.js 中:

import Vue from 'vue';
import App from './App.vue';
import { bootstrap, mount, unmount } from 'qiankun';// Vue 微应用的 bootstrap、mount 和 unmount 生命周期钩子
bootstrap(Vue, {Vue,App,// 其他配置...
});mount(() => {// 渲染微应用
});unmount(() => {// 卸载微应用
});

步骤 6: 启动应用

启动 React 主应用和 Vue 微应用:

# 在两个不同的终端中运行
cd main-app
npm startcd vue-micro-app
npm run serve

通过浏览器访问 React 主应用,并在其中看到 Vue 微应用的内容。


http://www.mrgr.cn/p/77318051

相关文章

MySQL—MySQL的存储引擎之InnoDB

MySQL—MySQL的存储引擎之InnoDB 存储引擎及种类 存储引擎说明MyISAM高速引擎&#xff0c;拥有较高的插入&#xff0c;查询速度&#xff0c;但不支持事务InnoDB5.5版本后MySQL的默认数据库存储引擎&#xff0c;支持事务和行级锁&#xff0c;比MyISAM处理速度稍慢ISAMMyISAM的…

Python-Flask-migrate安装和使用

在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。 环境…

MySQL-07.InnoDB数据存储结构

C-07.InnoDB数据存储结构 1.数据库的存储结构:页索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作。不同存储引擎中存…

C++感受6-Hello World 交互版

变量、常量输入、输出、流getline() 函数读入整行输入Hello() 函数复习新定义函数 Input() 实现友好的人机交互还有 “痘痘” 为什么挤不到的分析…… 1. DRY 原则简介 上一节课&#xff0c;我们写了两版“问候”程序。第一版的最大问题是重复的内容比较多&#xff0c;每一次问…

以链表为基础实现链式队列——————遍历、入队、出队

以链表为基础实现链式队列 ​ 如果打算以链表作为基础来实现队列的操作,可以避免内存浪费以及避免内存成片移动,只需要确定队头和队尾即可,一般把链表头部作为队头,可以实现头删,把链表尾部作为队尾,可以实现尾插。​ 需要注意的点:遍历队列需要备份地址 出队需要考虑空…

Windows设置开机自启动项

一、常见软件的开机自启设置大部分安装的软件,在设置中都带有“设置开机自启”的选项,直接在软件本身的设置中勾选相应开关项即可。 二、本身无开机自启的软件或一些绿色便携式的软件 (一)实现原理Windows自带了一个启动文件夹,在此文件夹中的软件都会在开机后进行启动操作…

个人音乐播放网站项目(SpringBoot+Linux部署上线)

在做完第一个博客系统项目以后&#xff0c;接着做下一个项目&#xff1a;音乐播放网站项目&#xff0c;此项目应用的技术栈和第一个项目是差不多的&#xff0c;即算是学完SSM等知识以后的两个入门级Java开发项目吧。 此项目包含的核心功能有&#xff1a; 一、登录、注册、退出…

李彦宏:程序员将不复存在! 周鸿祎回怼!网友:先把百度程序员都开除了!

近日&#xff0c;百度创始人、董事长兼首席执行官李彦宏在央视《对话》•开年说的访谈中指出&#xff1a;“基本上说以后其实不会存在“程序员”这种职业了&#xff0c;因为只要会说话&#xff0c;人人都会具备程序员的能力”。 “未来的编程语言只会剩下两种&#xff0c;一种…

Unsortbin attack原理及分析

Unsortbin attack原理 ✔️条件:首先要实现Unsortbin attack前提是可以控制Unsortbin attack chunk的bk指针 ✔️目的:我们可以实现修改任意地址为一个比较大的值 ✔️原理:1.Unsortbin的来源 1.当一个较大的 chunk 被分割成两半后,如果剩下的部分大于MINSIZE,就会被放到 …

flutter release 报错 Error: SocketException: Failed host lookup:

flutter 的 debug 模式没有任何问题 &#xff0c;打了release 包后一直报下面的错&#xff0c;查了一下是 因为没有网络权限 Error: SocketException: Failed host lookup: yomi-test-aws-sg.yomigame.games (OS Error: No address associated with hostname, errno 7) 按照下…

新手Pytorch入门笔记-transforms.Compose()

我使用的图片是上图&#xff0c;直接下载即可 transforms.Compose 是PyTorch中的一个实用工具&#xff0c;用于创建一个包含多个数据变换操作的变换对象。这些变换操作通常用于数据预处理&#xff0c;例如图像数据的缩放、裁剪、旋转等。使用transforms.Compose 可以将多个数据…

ClickHouse 高可用之副本

文章目录 ClickHouse 副本支持副本的引擎配置高可用副本副本应用1.副本表概述2.创建副本表3.写入模拟数据4.副本验证 扩展 —— 在 Zookeeper 中查看副本表信息 ClickHouse 副本 ClickHouse 通过副本机制&#xff0c;可以将数据拷贝存储在不同的节点上。这样&#xff0c;如果一…

运行django

确保app被注册 urls.py中编写url 视图对应关系 命令行启动 python manage.py runserver

iOS - 多线程-GCD-队列组

文章目录 iOS - 多线程-GCD-队列组1. 队列组1.1 基本使用步骤 iOS - 多线程-GCD-队列组 开发过程中&#xff0c;有时候想实现这样的效果 多个任务并发执行所有任务执行完成后&#xff0c;进行下一步处理&#xff08;比如回到主线程刷新UI&#xff09; 1. 队列组 可以使用GC…

npm run dev, serve和build的区别

真实命令分别为npm run vite,npm run vite build,npm run vite preview ctrl+c结束运行的npm项目

算法06链表

算法06链表 一、链表概述1.1概述1.2链表的组成部分&#xff1a;1.3链表的优缺点&#xff1a; 二、链表典例力扣707.设计链表难点分析&#xff1a;&#xff08;1&#xff09;MyLinkedList成员变量的确定&#xff1a;&#xff08;2&#xff09;初始化自定义链表&#xff1a;&…

OpenHarmony语言基础类库【@ohos.util.LinkedList (线性容器LinkedList)】

LinkedList底层通过双向链表实现&#xff0c;双向链表的每个节点都包含对前一个元素和后一个元素的引用。当需要查询元素时&#xff0c;可以从头遍历&#xff0c;也可以从尾部遍历&#xff0c;插入、删除效率高&#xff0c;查询效率低。LinkedList允许元素为null。 LinkedList…

谷歌 hackbar 不能使用的问题

谷歌 hackbar 不能使用的问题 下载 hackbar 插件:https://github.com/Mr-xn/hackbar2.1.3 解压文件,将其拖入 chrome 扩展程序中点击详情,点击下面来源的链接 会跳转到插件的安装位置,进入theme/js文件,打开hackbar-panel.js文件,将以下三处disable_hackbar()函数替换成i…

数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

通过C语言实现双向循环链表的相关功能, 并通过了Linux平台测试, 注释完整.版本:2024年4月26日 V1.0 发布于博客园/*** @file name : DoubleLinkedList.c* @brief : 实现双向循环链表的相关功能* @author :RISE_AND_GRIND@163.com* @date :2024/04/26* @version :…

【后端】python与django的开发环境搭建指南

安装Git 双击Git 客户端安装文件&#xff0c;在安装页面&#xff0c;单击“Next” 在安装路径选择页面&#xff0c;保持默认&#xff0c;单击“Next” 在功能组件选择页面&#xff0c;保持默认&#xff0c;单击“Next” 在开始菜单文件夹设置页面&#xff0c;保持默认&am…