微前端(拆分和细化,整合历史系统)

接入微前端

项目背景说明

假如我们完成了基于Vue2的项目,假设另外一个团队的小伙伴来实现前台可视化部分,他们使用的是最新的Vue3技术栈,现在有一个需求,他们的前台项目想直接使用我们的登录功能,获得token,进行数据获取渲染,这时候该怎么办呢?

1后台管理用户是老的Vue2技术栈,前台可视化项目用的是Vue3的技术栈 - 技术栈不同独立

2在用户信息上,前台可视化项目依赖于后台中的token数据 - 存在主次关系

3后台管理开发时由A团队开发,前台可视化B团队开发 - 独立开发互不影响

引入微前端,可以让一个大项目拆分成多个小项目,各自独立维护,互相不影响,并且还可以共享资源

微前端的好处

微前端是一种前端架构模式,它将大型单体应用程序分解为小的、松散耦合的部分,每个部分都可以独立开发、测试和部署。微前端的好处如下:

1.增强团队独立性:微前端使团队可以独立开发和部署其功能,而无需等待其他团队完成其工作。这提高了团队的独立性,减少了彼此之间的依赖性。

2.提高可维护性:微前端使开发人员可以将应用程序拆分为小的、可维护的部分。这些部分可以独立开发、测试和部署,从而使整个应用程序更易于维护。

3.提高可扩展性:微前端使开发人员可以更容易地添加新功能和模块,而无需更改整个应用程序。这提高了应用程序的可扩展性和灵活性。

4.降低风险:微前端使开发人员可以更容易地测试和部署单个模块,从而减少了整个应用程序出现问题的风险。

5.提高性能:微前端使开发人员可以在不影响整个应用程序的情况下优化单个模块的性能。这提高了应用程序的整体性能和用户体验。

总之,微前端使开发人员可以更容易地构建、维护和扩展大型单体应用程序,从而提高了应用程序的质量和可靠性。
在这里插入图片描述

乾坤方案改造

https://qiankun.umijs.org/zh

1. 主应用改造

1- 安装乾坤

npm i qiankun

2- 新增配置文件

resisterMicroApp.js

import { registerMicroApps, start } from 'qiankun'registerMicroApps([{name: 'hmzs-big-screen', // 子应用名称entry: '//localhost:5173', // 子应用运行服务地址(就是npm run dev时的那个地址)container: '#container', // 挂载容器(id=container)activeRule: '/big-screen' // 激活路由(在哪个路由下加载子应用)}
])start()

3- 入口文件启动

// 启动微前端配置
import './registerMicroApp'

4- 配置子应用渲染的位置

<template><div id="app"><router-view /><!-- 子应用挂载节点 --><div id="container" /></div>
</template><script>
export default {name: 'App'
}
</script>

2. 子应用改造

1- 配置vite-qiankun插件

npm i vite-plugin-qiankun -D
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import qiankun from 'vite-plugin-qiankun'export default defineConfig({base: '/',plugins: [vue(), // 这里的名称要和主应用改造是配置项中的name保持一致qiankun('Xxxx', {useDevMode: true})],server: {// 防止开发阶段的assets 静态资源加载问题origin: '//localhost:5173'},resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url)),}}
})

2- 入口文件改造

main.js

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import { renderWithQiankun, qiankunWindow } from 'vite-plugin-qiankun/dist/helper'import './styles/common.scss'// 使用乾坤渲染
renderWithQiankun({// 挂载时mount (props) {console.log('mount')render(props)},bootstrap () {console.log('bootstrap')},unmount (props) {console.log('unmount', props)},
})if (!qiankunWindow.__POWERED_BY_QIANKUN__) {render({})
}function render (props = {}) {const { container } = propsconst app = createApp(App)app.use(router)app.mount(container ? container.querySelector("#app") : "#app")
}

使用无界方案进行改造

无界微前端方案基于 WebComponent 容器 + iframe 沙箱

能够完善的解决适配成本、样式隔离、运行性能、页面白屏、子应用通信、子应用保活、多应用激活、vite 框架支持、应用共享等

1. 安装无界

https://wujie-micro.github.io/doc/

安装vue2组件

npm i wujie-vue2

注册插件

import WujieVue from 'wujie-vue2'Vue.use(WujieVue)

2. 微前端配置

思路:

  1. WujieVue组件通过url地址对子应用进行载入,url直接配置子应用的地址
  2. 设计一个路由地址,以当前路由地址作为判断条件,如果当前路由为 big-screen 就让WujieVue开始渲染

主应用配置(Vue2后台管理)

<template><div id="app"><router-view v-if="!showMicroApp" /><!-- 子应用挂载节点 --><WujieVue v-else width="100%" height="100%" name="bigscreen" :url="url" /></div>
</template><script>
export default {name: 'App',data() {return {url: 'http://localhost:5173/big-screen' // 子应用服务地址}},computed: {showMicroApp() {return this.$route.path === '/big-screen'}}
}
</script>

子应用配置(Vue3大屏项目)

vite.config.js

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],server: {// 防止开发阶段的assets 静态资源加载问题origin: '//localhost:5173'},resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}}
})

3. 大屏按钮跳转

在这里插入图片描述

<div class="avatar-wrapper"><el-button size="small" plain @click="$router.push('/big-screen')">可视化大屏</el-button><!-- 用户名称 --><span class="name">XXXXXXX</span>
</div>

3. 大屏按钮跳转

[外链图片转存中…(img-wy1KUdlR-1688565310858)]

<div class="avatar-wrapper"><el-button size="small" plain @click="$router.push('/big-screen')">可视化大屏</el-button><!-- 用户名称 --><span class="name">XXXXXXX</span>
</div>

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

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

相关文章

数据结构与算法(持续更新中..)

一. 概论 1. 数据结构 队列&#xff1a;一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项&#xff1b;队列在尾部添加新元素&#xff0c;并从头部移除元素。最新添加的元素必须排在队列的末尾。&#xff08;例如&#xff1a;去食堂排队打饭&#xff0c;排在前…

新版本vscode使用配置文件功能,解决不同项目使用不同的插件

如果你同时有vue2,vue3的项目。一定会遇到插件的问题。因为vue2项目插件是使用vetur的&#xff0c;vue3是使用volar的。 以前vscode为了在不同项目中能使用不同的配置文件&#xff0c;是使用工作区的概念去解决的&#xff0c;但是比较复杂而且不好用。 现在新版本的vscode&…

Go语言操作MySql数据库

go-sql-driver/mysql库是Go语言官方推荐的MySQL驱动库&#xff0c;可以很方便地实现对MySQL数据库的连接和操作。本文记录以下使用go-sql-driver/mysql数据库驱动来操作mysql数据库。 目录 1.安装驱动程序 2.导入驱动包 3.操作数据库 3.1 获取mysql版本 3.2 创建表 3.3 …

中介者模式的学习与使用

1、中介者模式的学习 中介者模式是一种行为型设计模式&#xff0c;它通过引入一个中介者对象来解耦一组对象之间的交互。中介者模式促进了对象之间的松耦合&#xff0c;使得它们可以独立地进行通信&#xff0c;而不需要直接相互引用。   在中介者模式中&#xff0c;有以下几个…

rabbitMq怎么查看队列消息-Tracing日志

Trace 是Rabbitmq用于记录每一次发送的消息&#xff0c;方便使用Rabbitmq的开发者调试、排错。 1、启动Tracing插件 在RabbitMQ中默认是关闭的&#xff0c;需手动开启。此处rabbitMQ是使用docker部署的 ## 进入rabbitMq中 docker exec -it rabbitmq1 bash ## 启动日志插件 rabb…

设计模式篇---建造者模式

文章目录 概念结构实例总结 概念 建造者模式的定义&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。 这么看起来有点难以理解&#xff0c;翻译一下就是 用户无需关注创建复杂对象的过程&#xff0c;只需要指定创建的对象即…

多元回归预测 | Matlab基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab基于基于粒子群算法优化深度置信网络(PSO-DBN)的数据回归预测,matlab代码回归预测,多变量输入模型,多变量输入模型 评价

计算机网络_ 1.3 网络核心(数据交换_电路交换_多路复用)

计算机网络_数据交换_电路交换_多路复用 多路复用频分多路复用FDM时分多路复用TDM波分多路复用WDM码分多路复用CDM 多路复用 多路复用&#xff08;Multiplexing&#xff09;&#xff0c;简称复用&#xff0c;是通信技术的基本概念。 链路/网络资源&#xff08;如带宽&#x…

浅谈数据中心机房动环监控系统可视化设计与研究

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;为了维护好数据中心机房动力环境&#xff0c;及时发现隐患和排除故障&#xff0c;降低管理成本控制能耗&#xff0c;提高运维效率&#xff0c;保障数据中心安全、高效、环保、稳定的运行&#xff0c;针对目前机房管理…

云原生(第四篇)-k8s yaml文件

Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 YAML 格式&#xff1a;用于配置和管理&#xff0c;YAML 是一种简洁的非标记性语言&#xff0c;内容格式人性化&#xff0c;较易读 YAML 语法格式&#xff1a; ●大小写敏…

mysql redis区别

一、.redis和mysql的区别总结 &#xff08;1&#xff09;类型上 从类型上来说&#xff0c;mysql是关系型数据库&#xff0c;redis是缓存数据库 &#xff08;2&#xff09;作用上 mysql用于持久化的存储数据到硬盘&#xff0c;功能强大&#xff0c;但是速度较慢 redis用于存储使…