微应用-qiankun-3

前言

上一篇把vue2 和vue3 进行了微应用的嵌入,但是里面发现了不少的问题,这篇文章我们主要来解决这些问题。

项目中遇到的问题整理

输入路径无法跳转对应微应用

上一篇文章中的配置项完成后,把项目起了个 git 仓库,重新安装了依赖,然后就发现了问题,当时是从浏览器直接输入的对应地址,几个子应用正常跳转,但是同样的代码,再这样操作就无法跳转到对应页面了。后来查询原因是需要子应用进行对应路由的配置。那我们来设置一下。

react 主应用路由配置

安装依赖包 pnpm install react-router-dom index.js 中路由添加,不然路由跳转会报错

js 复制代码
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { registerMicroApps, start } from 'qiankun';
import { BrowserRouter } from 'react-router-dom';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  // 添加路由
  <BrowserRouter><App /></BrowserRouter>
);


registerMicroApps([
  {
    name: 'micro-react', // 子应用名称,尽量和子应用package.json name 一致
    entry: '//localhost:3001', //子应用端口
    container: '#micro-container', //子应用渲染节点
    activeRule: '/homepage', //路由监听,如果进入该路由,则渲染子应用
  },
  {
    name: 'micro-vue2x', // 子应用名称,尽量和子应用package.json name 一致
    entry: '//localhost:3002', //子应用端口
    container: '#micro-container', //子应用渲染节点
    activeRule: '/vue2home', //路由监听,如果进入该路由,则渲染子应用
  },
  {
    name: 'micro-vue3x', // 子应用名称,尽量和子应用package.json name 一致
    entry: '//localhost:3003', //子应用端口
    container: '#micro-container', //子应用渲染节点
    activeRule: '/vue3home', //路由监听,如果进入该路由,则渲染子应用
  }
])

start();

app.js 中添加路由跳转按钮,实现一个简单的界面效果,三个tab切换不同的子应用,在tab 路由跳转对应 activeRule 路径即可

react 子应用 同样在 index.js 中 配置 BrowserRouter,在 app.js 中 配置 /homepage 路由

vue2与vue3 我们在生成项目时已经选择了路由项,用对应的路由来设置即可。

tab 切换导致 react 子应用不渲染问题

问题描述:第一次进入react 子应用界面正常显示,切换vue子应用后再回来页面空白,没有任何报错。

这个问题卡了好久,查了不少资料,试着去卸载dom 也依然无法解决,查看dom 节点,发现只剩下了根节点,试着对dom 节点进行存在性判断,就可以解决了。但是,又发现了一个奇怪的问题,现在去掉节点存在的判断去复现原来的问题,发现又一切正常了......真的很妖......
修改方案: 加一个root存在的条件,如果不存在进行赋值dom 如果存在,则直接render。但现在又无法复现,改不改都没啥必要了,如果有这种情况,可以用这个方案试下 。

部署

我们采用第一种方式,主子应用部署在同一个服务器下。改造一下项目结构,使整个项目更加清晰明了。在根目录配置主应用,创建child目录,将子应用移入。(如果子应用运行报错,删除依赖包重新安装即可

react 子应用修改

在index.js 中路由添加 basename

表示如果是qiankun打开,我们运行/app-micro-react 路由,如果是子应用单独打开,则运行 /child/micro-react/ 路由

在webpack.config.js 中添加publicPath

vue2,vue3的修改是一样

主应用修改 index.js 修改子应用配置文件

  1. 注意entry与 activeRule 不要用同一个路径,否则刷新时会有问题。
  2. entry 的路径问题,不然会导致无法挂载。(相对路径有问题,原因还在排查)
js 复制代码
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { registerMicroApps, start } from 'qiankun';
import { BrowserRouter } from 'react-router-dom';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  // 添加路由
  <BrowserRouter><App /></BrowserRouter>
);
registerMicroApps([
  {
    name: 'micro-react', // 子应用名称,尽量和子应用package.json name 一致
    entry: 'http://localhost:3001/child/micro-react', //子应用
    container: '#micro-container', //子应用渲染节点
    activeRule: '/app-micro-react', //路由监听,如果进入该路由,则渲染子应用
  },
  {
    name: 'micro-vue2x', // 子应用名称,尽量和子应用package.json name 一致
    entry: 'http://localhost:3002/child/micro-vue2x', //子应用
    container: '#micro-container', //子应用渲染节点
    activeRule: '/app-micro-vue2x', //路由监听,如果进入该路由,则渲染子应用
  },
  {
    name: 'micro-vue3x', // 子应用名称,尽量和子应用package.json name 一致
    entry: 'http://localhost:3003/child/micro-vue3x', //子应用
    container: '#micro-container', //子应用渲染节点
    activeRule: '/app-micro-vue3x', //路由监听,如果进入该路由,则渲染子应用
  }
])

start();

现在主子应用都已经正常运行,我们来进行打包输出配置 主应用:按照 react 正常的打包流程生成build 文件即可 react子应用:package.json中 添加homepage路径

在.env文件中 添加 BUILD_PATH

vue 子应用 (2,3一样)在vue.config.js 中添加配置 outputDir

最后

下一步就是通过nginx部署在服务器了,之前腾讯的到期了也没续费,后面再搞个服务器部署上去测试一下。

相关推荐
肥肥呀呀呀3 分钟前
在Flutter上如何实现按钮的拖拽效果
前端·javascript·flutter
Zero10171320 分钟前
【React的useMemo钩子详解】
前端·react.js·前端框架
养军博客21 分钟前
spring boot3.0自定义校验注解:文章状态校验示例
java·前端·spring boot
uperficialyu32 分钟前
2025年01月10日浙江鑫越系统科技前端面试
前端·科技·面试
付朝鲜1 小时前
用自写的jQuery库+Ajax实现了省市联动
java·前端·javascript·ajax·jquery
coderYYY1 小时前
多个el-form-item两列布局排齐且el-select/el-input组件宽度撑满
前端·javascript·vue.js·elementui·前端框架
荔枝吖1 小时前
项目中会出现的css样式
前端·css·html
Dontla2 小时前
何时需要import css文件?怎么知道需要导入哪些css文件?为什么webpack不提示CSS导入?(导入css导入规则、css导入规范)
前端·css·webpack
小堃学编程2 小时前
前端学习(2)—— CSS详解与使用
前端·css·学习
蓝婷儿2 小时前
第一章:HTML基石·现实的骨架
前端·html