实现 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 start

cd vue-micro-app
npm run serve

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序开发工具的使用,各个配置文件详解,小程序开发快速入门

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

网页信息提取能力哪家强?GPT4、Claude、perplexity、kimi、通义千问大比拼

barnesandnoble网上书店有一个页面&#xff1a;https://www.barnesandnoble.com/b/books/step-into-reading-early-readers-kids-fiction/step-into-reading-book-series-a-step-3-book-childrens-fiction/_/N-29Z8q8Z2i94?Nrpp40&page1 &#xff0c; 现在想把网页上的书名…

【Linux高性能服务器编程】两种高性能并发模式剖析——半同步/半异步模式

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的Linux高性能服务器编程系列之两种高性能并发模式介绍&#xff0c;在这篇文章中&#xff0c;你将会学习到高效的创建自己的高性能服务器&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘UML图来帮助大家来理解…

分布式与一致性协议之拜占庭将军问题(三)

拜占庭将军问题 叛将先发送消息 如果是叛将楚先发送作战消息&#xff0c;干扰作战计划&#xff0c;结果会有所不同吗&#xff1f; 在第一轮作战信息协商中&#xff0c;楚向苏秦发送作战指令"进攻",向齐、燕发送作战指令"撤退"&#xff0c;如图所示(当然还…

【勒索病毒恢复】.svh勒索病毒介绍及恢复方案

一、.[[backupwaifu.club]].svh勒索病毒介绍 svh勒索病毒是一种恶意软件&#xff0c;它通过加密受害者的文件并要求支付赎金来解锁&#xff0c;从而达到勒索的目的。这种病毒已经存在了数年&#xff0c;并且不断演变&#xff0c;形成了多种不同的家族和变种。如果您的数据承载着…

接口测试-笔记

Date 2024年4月23日21:19:51 Author KarrySmile 1. 前言 因为想更加规范地开发接口&#xff0c;同时让自己测试接口的时候更加高效&#xff0c;更好地写好接口文档。所以学习黑马的《接口自动化测试》课程。链接&#xff1a;黑马程序员软件测试接口自动化测试全套视频教程&a…

Maven基础篇6

Idea环境中资源上传与下载 具体问题本地仓库如何与私服打交道&#xff1b; 本地仓库向私服上传文件&#xff0c;上传的文件位置在哪里&#xff1f; 访问私服配置相关信息&#xff1a;用户名密码&#xff1b; 下载东西&#xff0c;需要的各种信息&#xff0c;需要的仓库组的…

TDengine高可用探讨

提到数据库&#xff0c;不可避免的要考虑高可用HA&#xff08;High Availability&#xff09;。但是很多人对高可用的理解并不是很透彻。 要搞清高可用需要回答以下几个问题&#xff1a; 什么是高可用&#xff1f;为什么需要高可用&#xff1f;高可用需要达到什么样的目标&am…

【面试经典 150 | 数组】反转字符串中的单词

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;模拟实现方法二&#xff1a;使用库函数 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本…

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南

公园景区伴随音乐系统-公园景区数字IP广播伴随音乐系统建设指南 由北京海特伟业任洪卓发布于2024年4月23日 随着“互联网”被提升为国家战略&#xff0c;传统行业与互联网的深度融合正在如火如荼地展开。在这一大背景下&#xff0c;海特伟业紧跟时代步伐&#xff0c;凭借其深厚…

Security用户管理(一)

Security初探(三)-CSDN博客 Security的身份验证流程: AuthenticationFilter拦截请求并将身份验证职能委托给AuthticationManager.为了实现身份验证逻辑,AuthticationManager会使用身份验证程序.为了检查用户名和密码,AuthenticationProvider会使用UserDetailsService和Passwor…

爱上JDK源码阅读-枚举类

在日常开发中&#xff0c;经常会用到枚举类。这篇文章主要探讨一下枚举类和普通类有什么区别&#xff0c;以及编译过程中偷偷做了什么事情。 知识点 枚举类的本质编译器对枚举类的改动 先看一段简单的枚举类代码&#xff1a; enum StatusType {ON(1) ,OFF(2);StatusType(int …

mongodb 安装问题

1. mongodb启动时显示 Illegal instruction (core dumped) mongodb 5.0之后(包括5.0) 开始使用需要使用 AVX 指令集 2.启动时报错 ERROR: child process failed, exited with 1 通过指令 bin/mongod --repair 查看报错信息 根据报错信息进行修改 3. 配置服务器添加节点时…

Ubuntu20.04安装redis5.0.7

redis下载命令&#xff1a; wget https://download.redis.io/releases/redis-5.0.7.tar.gz 解压到 opt目录下 tar -zxvf redis-5.0.7.tar.gz -C /opt apt install -y gcc # 安装gccapt install make # 安装make 后面执行make一直报错 make报错后清除&#xff1a; make …

数据结构(Wrong Question)

一、绪论 1.1 数据结构的基本概念 D 因为抽象数据类型&#xff08;ADT&#xff09;描述了数据的逻辑结构和抽象运算&#xff0c;通常用&#xff08;数据对象&#xff0c;数据对象&#xff0c;基本操作集&#xff09;这样的三元组来表示&#xff0c;从而可构成一个完整的数据结…

Unity 如何制作和发布你的 Package

一、制作你的第一个 Package Unity Package 不做过多赘述&#xff0c;像 URP 本质上也是一个 Package&#xff0c;在 Unity 中可以通过菜单栏 → Window → Package manager 来管理你当前的所有 Package 本篇文章主要介绍&#xff1a;如何制作并发布属于你的 Package 1.1 Pac…

配置网络设备的密码设置以及忘记密码的恢复方式以及实现全网互通

1.实验拓扑图&#xff1a; 2.实验需求&#xff1a; 1.推荐步骤 1.1配置IP&#xff1a; 不过多说了&#xff0c;较为基础&#xff08;略&#xff09; 2.推荐步骤 2.所有网络设备配置console接口密码 首先进入全局模式&#xff0c;输入以下代码(进入接口console接口0给其配置密…

在 Windows 系统上彻底卸载 TeamViewer 软件

在 Windows 系统上彻底卸载 TeamViewer 软件 References 免费版仅供个人使用 您的会话将在 5 分钟后终止 Close TeamViewer by locating the TeamViewer icon in the system tray, right click and “Exit TeamViewer”. Right click Windows start menu then Control Panel -…

centos 安装配置文件中心 nacos2.2.3 稳定版

安装mysql 8 参考文章 centos7搭建mysql5.6 && mysql 8.0_centos7 mysql5.6-CSDN博客 安装 jdk 17 官网下载 对应的版本 Java Downloads | Oracle wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_l…

Swift-27-类的初始化与销毁

Swift的初始化是一个有大量规则的固定过程。初始化是设置类型实例的操作&#xff0c;包括给每个存储属性初始值&#xff0c;以及一些其他准备工作。完成这个过程后&#xff0c;实例就可以使用了。 简单来讲就是类的构造函数&#xff0c;基本语法如下&#xff1a; 注意&#xff…
最新文章