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

微前端是一种将多个小型前端应用组合成一个大型应用的架构方式。它允许团队独立开发、测试、部署和维护应用的各个部分。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.mzph.cn/diannao/2540.shtml

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

相关文章

Qt:实现TCP同步与异步读写消息

一、异步读写 在 Qt 中实现 TCP 客户端和服务器的同步和异步读写消息涉及使用 QTcpSocket 和 QTcpServer 类。这两个类提供了用于建立 TCP 连接、发送和接收数据的功能。下面是一个简单的示例&#xff0c;演示了如何在 Qt 中实现 TCP 客户端和服务器的同步和异步读写消息&…

ISP比普通的静态代理相比有什么优势?

ISP&#xff08;Internet Service Provider&#xff09;&#xff0c;即互联网服务提供商&#xff0c;是向广大用户综合提供互联网接入业务、信息业务、增值业务的电信运营商。而静态代理则是一个固定不变的代理IP地址&#xff0c;具有稳定性强、兼容性好和管理方便等特点。当我…

深入理解Java消息中间件-Apache Kafka

在数字化时代&#xff0c;数据如同血液一样流动于现代应用的每一个角落。如何高效、可靠地处理这些数据流&#xff0c;成为了构建响应式、可扩展和弹性系统的关键挑战。作为一名专业的Java技术架构师和作家&#xff0c;我将深入分析Apache Kafka这一广泛使用的Java消息中间件解…

LiveNVR监控流媒体Onvif/RTSP常见问题-如何对比监控摄像头延时视频流延时支持webrtc视频流播放超低延时播放

LiveNVR如何对比监控摄像头延时视频流延时支持webrtc视频流播放超低延时播放 1、问题场景2、如何对比延时&#xff1f;3、WEBRTC延时对比4、LiveNVR支持WEBRTC输出5、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、问题场景 需要低延时的视频流监控播放&#xff0c;之前可以用rtmp…

什么是架构?说说我的理解

什么是架构了&#xff1f;其实就是根据企业的具体情况给出的一个解决方案&#xff0c;并且这个架构能升级&#xff0c;如果企业的流量突然暴增&#xff0c;也能适应变化&#xff0c;这才是好的架构&#xff0c;一个项目是采用单体架构了&#xff1f;还是采用前后端分离&#xf…

在docker容器中编译 rk3588 ubuntu固件

文件准备 Linux SDK ---- rk3588_linux_release_20230114_v1.0.6c_0*Ubuntu根文件系统 ---- Ubuntu22.04-Xfce_RK3588_v3.11-27_20240410.img.7z 硬件环境 一个可联网的linux机器&#xff0c;并且装有docker 打包一个docker编译环境 Dockerfile内容 直接通过dockerfile构…

路由引入,过滤实验

实验拓补图 实验目的&#xff1a; 1、按照图示配置 IP 地址&#xff0c;R1&#xff0c;R3&#xff0c;R4 loopback口模拟业务网段 2、R1 和 R2 运行 RIPv2,R2&#xff0c;R3和R4运行 OSPF&#xff0c;各自协议内部互通 3、在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的…

OceanBase诊断调优 】—— 如何快速定位SQL问题

作者简介&#xff1a; 花名&#xff1a;洪波&#xff0c;OceanBase 数据库解决方案架构师&#xff0c;目前负责 OceanBase 数据库在各大型互联网公司及企事业单位的落地与技术指导&#xff0c;曾就职于互联网大厂和金融科技公司&#xff0c;主导过多项数据库升级、迁移、国产化…

Qt配置CMake出错

一个项目需要在mingw环境下编译Opencv源码&#xff0c;当我用Qt配置opencv的CMakeLists.txt时&#xff0c;出现了以下配置错误&#xff1a; 首先我根据下述博文介绍&#xff0c;手动配置了CMake&#xff0c;但仍不能解决问题。 Qt(MinGW版本)安装 - 夕西行 - 博客园 (cnblogs.…

计算机网络相关知识总结

一、概述 计算机网络可以极大扩展计算机系统的功能机器应用范围&#xff0c;提高可靠性&#xff0c;在为用户提供放方便的同时&#xff0c;减少了整体系统费用&#xff0c;提高性价比。 计算机网络的功能主要有&#xff1a;1. 数据共享&#xff1b;2. 资源共享&#xff1b;3. 管…

equals和==有什么区别?

面试题目 和equals有什么区别&#xff1f;这两个都适用于哪些场景进行比较&#xff1f;为什么重写了equals方法&#xff0c;还必须重写hashcode方法&#xff1f; 这个问题基本上在各面试题库中都会有出现&#xff0c;也是现实项目中使用比较多的一个比较&#xff0c;面试的时…

用html画一个四叶草

<!DOCTYPE html> <html lang"en" > <head> <meta charset"UTF-8"> <title>四叶草</title> <link href"" rel"stylesheet"> <link rel"stylesheet" href"css/style.css&q…

数字逻辑电路基础-有限状态机

文章目录 一、有限状态机基本结构二、verilog写一个基础有限状态机(moore型状态机)三、完整代码一、有限状态机基本结构 本文主要介绍使用verilog编写有限状态机FSM(finite state machine),它主要由三部分组成,下一状态逻辑电路,当前状态时序逻辑电路和输出逻辑电路。 有…

更易使用,OceanBase开发者工具 ODC 4.2.4 版本升级

亲爱的朋友们&#xff0c;大家好&#xff01;我们的ODC&#xff08;OceanBase Developer Center &#xff09;再次迎来了重要的升级V 4.2.4&#xff0c;这次我们诚意满满&#xff0c;从五个方面为大家精心打造了一个更加易用、贴心&#xff0c;且功能更强的新版本&#xff0c;相…

SAP Fiori开发中的JavaScript基础知识15 - 原型,object,constructor,class,继承

1. 前言 本文将介绍JavaScript中的核心概念 - 原型&#xff0c;并会介绍基于原型的应用场景object&#xff0c;constructor&#xff0c;class&#xff0c;继承。 本文会将这几个核心概念汇总在一篇博客中&#xff0c;因为这些概念是触类旁通的&#xff0c;希望对你有帮助。 …

RTU遥测终端为城市排水安全保驾护航!

近年来&#xff0c;全球气候变迁与城市化进程不断加速&#xff0c;导致强降雨事件频发&#xff0c;道路低洼地带、下穿式立交桥和隧道等区域在暴雨中常易积水&#xff0c;严重阻碍了人民的出行&#xff0c;甚至危及生命与财产安全。而传统的排水管网管理方式已难以适应现代城市…

STM32 学习13 低功耗模式与唤醒

STM32 学习13 低功耗模式与唤醒 一、介绍1. STM32低功耗模式功能介绍2. 常见的低功耗模式&#xff08;1&#xff09;**睡眠模式 (Sleep Mode)**:&#xff08;2&#xff09;**停止模式 (Stop Mode)**:&#xff08;3&#xff09;**待机模式 (Standby Mode)**: 二、睡眠模式1. 进入…

docker swoole+php8.2

安装 docker pull phpswoole/swoole:php8.2-alpine docker run --rm phpswoole/swoole:php8.2-alpine php -m docker run --rm phpswoole/swoole:php8.2-alpine php --ri swoole docker run --rm phpswoole/swoole:php8.2-alpine composer --version #换阿里composer源 docker…

SystemServer启动SystemUI

SystemServer启动SystemUI&#xff1a; private static void startSystemUi(Context context, WindowManagerService windowManager) {PackageManagerInternal pm LocalServices.getService(PackageManagerInternal.class);Intent intent new Intent();intent.setComponent(p…

BBS前后端混合项目--01

总路由 # urls.py """BBS1 URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.2/topics/http/urls/ Examples: Function views1. Add an import: from my_app import views2…