实现 vue&react 混合开发项目步骤-微前端

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

相关推荐
AiMan8 分钟前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真11 分钟前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment14 分钟前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan25 分钟前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端
总要学点什么28 分钟前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
上海懒图科技1 小时前
工厂厂区电子地图定位导航:厂区人车精准定位,安全合规双保障
前端·arcgis·vue
西安小哥1 小时前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能
陈随易2 小时前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员
恋猫de小郭2 小时前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter
严肃小白兔3 小时前
TanStack Router 更新构建工具链:Node.js 兼容性、路由分割与前端工程实践
前端·node.js·状态模式