当前位置: 首页 > news >正文

无界构建微前端?NO!NO!NO!多系统融合思路!

文章目录

    • 微前端理解
      • 1、微前端概念
      • 2、微前端特性
      • 3、微前端方案
        • a、iframe
        • b、qiankun --> 使用比较复杂 --> 自己写对vite的插件
        • c、micro-app --> 京东开发 --> 对vite支持更拉跨
        • d、EMP 方案--> 必须使用 webpack5 --> 很多人感觉不是微前端 --> 去中心化方式去共享模块,更像拆包
        • e、无界
    • 安装无界
    • 使用
    • 应用跨域问题解决
    • 无界的槽点
    • 硬着头皮换思路
    • 问题一:pxtorem
      • 注意
    • 问题二:区分环境
      • 注意
    • 菜鸟暂时只有这两个问题,然后就迁移成功了,至于跳转的任务被延后,所以暂时不写了!

菜鸟最近遇见的一个公司的规划需求:

公司想把全部的系统合并,使其只用一个登录,就可以访问全部的系统!避免系统太多,导致别人使用负担加大!

菜鸟刚开始做这个就想到了微前端,规划了好久,现在才有空来研究!

注:本文是个人思路的展现,并非技术介绍文章,不感兴趣可以划走!

微前端理解

1、微前端概念

微前端是借鉴了微服务的理念,将一个庞大的应用拆分成多个独立灵活的小型应用,每个应用都可以独立开发,独立运行,独立部署,还可以随意组合,这样就降低了耦合度,从而更加灵活。

2、微前端特性

在这里插入图片描述

3、微前端方案

a、iframe

在这里插入图片描述

b、qiankun --> 使用比较复杂 --> 自己写对vite的插件

在这里插入图片描述

c、micro-app --> 京东开发 --> 对vite支持更拉跨

在这里插入图片描述

注:

适配 vite 需要写很多代码,有些还要改,而且会失去很多功能!

d、EMP 方案–> 必须使用 webpack5 --> 很多人感觉不是微前端 --> 去中心化方式去共享模块,更像拆包

在这里插入图片描述

e、无界

在这里插入图片描述

更多见我的b站笔记:https://www.bilibili.com/opus/934644514948120594

安装无界

无界的使用相对简单,随便创建一个应用然后安装即可

在这里插入图片描述

这里直接使用的是作者进一步封装后的无界,更加简单!

使用

安装完成后就可以使用了,也是非常简单,直接 main.js 中引入即可,然后就可以在vue文件中直接当成组件使用

在这里插入图片描述

在这里插入图片描述

这里的url就是你子应用跑起来的时候的地址!

但是正如菜鸟标识的,发现 webpack+vue3 的并不能正常显示,问了小满大佬才发现是跨域的问题!

应用跨域问题解决

在这里插入图片描述

在webpack中添加这个配置,就可以出现了。

但是还有很多问题,菜鸟确实解决不了!

无界的槽点

无界使用的人还是太少,遇见问题没办法搜到,只能问大佬,但是 大佬回你是情分,不回才是本分!菜鸟在b站上跟着小满zs大佬学的无界,也顺利加上了大佬。但是问了两个问题后,可能大佬就要忙自己的事情,没时间回答,菜鸟也就识趣的自己研究,然后研究很长时间,也不是很理解为什么,就发沸点问jym了!

沸点见:https://juejin.cn/pin/7451432113994825766

加了无界的群,问的问题也没人有反应!

硬着头皮换思路

菜鸟想着反正后端也要做 sso,不如就直接把一个系统当主系统,其他的都当链接放进来得了,跳转过去的时候携带token!

正好有一个集合了很多小的功能的系统在重构,所以就将其作为主系统了!后端使用了若依,所以前端也直接使用若依这个框架了!

所以大致的思路就变成了这样了

在这里插入图片描述

这个基本就很简单,但是项目重构还是遇见了很多问题,这里就继续做记录了!

问题一:pxtorem

菜鸟之前一直都是用 webpack 的 pxtorem,详见:px2rem不生效,但若依是vite开发的,所以菜鸟必须得解决这个插件迁移的问题!

这里就不展示解决流程了,反正就是不断尝试+GPT!菜鸟个人感觉vite使用pxtorem更加简洁,因为vite原生对postcss有支持,所以直接下载一个插件postcss-pxtorem即可:

npm i postcss-pxtorem -D

配置这里和 webpack 很大的不同

import postCssPxToRem from 'postcss-pxtorem'export default defineConfig(({ mode, command }) => {return {css: {postcss: {plugins: [// 若依作者写的{postcssPlugin: 'internal:charset-removal',AtRule: {charset: (atRule) => {if (atRule.name === 'charset') {atRule.remove()}}}},// pxtorem 配置postCssPxToRem({rootValue: 37.5,propList: ['*'], // 指定哪些 CSS 属性的 px 单位需要被转换为 remreplace: true, // 控制是否 直接替换原来的 px 单位mediaQuery: false, // 是否将媒体查询中的 px 转换为 rem,会把max-width改成rem,建议为falseminPixelValue: 2,exclude: (file) => {// console.log('File path:', file) // 打印实际传入路径// console.log('Exclude:', !file.includes('editform')) // 打印排除结果return !file.includes('editform') // 保留 editform 目录}})]}}}
})

注意

这里菜鸟的用法和大部分情况不一样,菜鸟这里只需要对一个界面进行适配,其他界面都是采用若依适配的就行,所以需要过滤file。但是 postCssPxToRem 这个插件没有 include 属性,所以只能通过 exclude的 ! 来取出。

这里需要注意,不能这样写:

exclude: (file) => {return !file.includes(path.resolve(__dirname, 'src/views/manage/editform'));
}

反正菜鸟打印出来,里面 file 和这个path.resolve(__dirname, 'src/views/manage/editform')生成的路径不一样,一个是\,一个是/,且你还改不了!

界面引入 lib-flexible,哪里使用就哪里引入就行

import 'lib-flexible'

这里有个坑,就是虽然这个 lib-flexible 成功引入了,但是不知道是若依还是什么搞的鬼,一直显示body的font-size是12px。可以自己重新监听查看:

// 监听界面大小变化
window.addEventListener('resize', () => {console.log('Current rem base value (font-size):', document.documentElement.style.fontSize)
})

问题二:区分环境

菜鸟使用若依,才感觉原来环境区分清楚还是一劳永逸的事情,且运行不同的 npm 命令就运行不同的结果还是很有必要的!

这里把常用的几种文件列出来:

在这里插入图片描述

运行命令

"scripts": {"dev": "vite --mode development","test": "vite --mode test","prod": "vite build --mode production","build:dev": "vite build --mode development","build:test": "vite build --mode test","build:prod": "vite build --mode production"
}

proxy配置

server: {port: 80,host: true,open: true,proxy: {// 开发环境请求 --> 菜鸟这里直接请求的测试环境'/dev-api': {target: 'http://xxx.xx.xx.xx:23000/test-api/',changeOrigin: true,rewrite: (p) => p.replace(/^\/dev-api/, '')},// 测试环境请求'/test-api': {target: 'http://xxx.xx.xxx.xx:23000/test-api/',changeOrigin: true,rewrite: (p) => p.replace(/^\/test-api/, '')},// 特殊的 --> 菜鸟这个系统是跨系统的,某个界面需要调另一个系统的接口'/CRM': {target: 'http://xxx.xx.xxx.xx:18000/', // crmchangeOrigin: true, // 如果接口跨域,需要进行这个参数配置rewrite: (p) => p.replace(/^\/CRM/, '')}}
}

注意

这里的 --mode 后面的并非是运行的 NODE_ENV 值,而是让你去找哪一个 .evn.xxxx 文件的!

所以这里有个坑,就是运行 build:test 执行时的 NODE_ENV 依旧还是 production ,而非test!这里需要在 .env.test 文件中添加这样一行!

VITE_NODE_ENV= 'test'

内容大致都是这样(需要什么加什么)

在这里插入图片描述

不过 production 和 development 的 VITE_NODE_ENV 都是对的,所以可以不用写!

菜鸟暂时只有这两个问题,然后就迁移成功了,至于跳转的任务被延后,所以暂时不写了!

后续会更新……

相关文章:

无界构建微前端?NO!NO!NO!多系统融合思路!

文章目录 微前端理解1、微前端概念2、微前端特性3、微前端方案a、iframeb、qiankun --> 使用比较复杂 --> 自己写对vite的插件c、micro-app --> 京东开发 --> 对vite支持更拉跨d、EMP 方案--> 必须使用 webpack5 --> 很多人感觉不是微前端 --> 去中心化方…...

DeepSeek辅助段落扩写的能力怎么样?

DeepSeek-R1在学术写作的诸多细节层面展现出了显著的应用价值。接下来我们将通过一系列具体案例,深入探讨该工具如何在扩写、翻译、发表以及内容改进等关键环节为学术写作提供有力支持。在提问环节,DeepSeek-R1能够高效地简化提示词,并精准地…...

分形的魅力:数学与艺术的完美结合

分形的魅力:数学与艺术的完美结合 分形(Fractal)是一种神奇的数学结构,它以其无限的复杂性和自相似性吸引了无数科学家、艺术家和数学爱好者。分形不仅仅是数学中的一个概念,它还广泛应用于自然科学、计算机图形学和艺…...

如何通过工业智能网关进行数控机床数据采集?

数控机床数据采集过程是一个从物理连接到数据处理的完整链条,涉及设备连接、数据采集、预处理和传输的复杂过程,包含通信协议匹配、设备配置、数据采集设置、数据预处理和传输等多个环节。天拓四方自主研发的TDE工业智能网关作为这一过程中的核心设备&am…...

水波效果

水波效果指在计算机图形学中模拟水面波纹的视觉效果,通常用于游戏、动画或者其他虚拟场景中。主要用于体现水体的动态感,比如水的波动、反射、折射、透明等,可以让人感觉像真实的水一样流动闪耀。 核心特点就是: 动态波纹光学特…...

康谋方案 | BEV感知技术:多相机数据采集与高精度时间同步方案

随着自动驾驶技术的快速发展,车辆准确感知周围环境的能力变得至关重要。BEV(Birds-Eye-View,鸟瞰图)感知技术,以其独特的视角和强大的数据处理能力,正成为自动驾驶领域的一大研究热点。 一、BEV感知技术概…...

【重新认识C语言----结构体篇】

目录 -----------------------------------------begin------------------------------------- 引言 1. 结构体的基本概念 1.1 为什么需要结构体? 1.2 结构体的定义 2. 结构体变量的声明与初始化 2.1 声明结构体变量 2.2 初始化结构体变量 3. 结构体成员的访…...

#渗透测试#批量漏洞挖掘#Splunk Enterprise for Windows 任意文件读取漏洞( CVE-2024-36991)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

苹果公司宣布正式开源 Xcode 引擎 Swift Build145

2025 年 2 月 1 日,苹果公司宣布正式开源 Xcode 引擎 Swift Build145。 Swift 是苹果公司于 2014 年推出的一种开源编程语言,用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 等平台的应用程序。 发展历程 诞生:2014 年,苹果在全球…...

7.list

本篇博客梳理C的STL中的list容器 一、list的基本结构与使用 1.list的介绍 list的底层是带头循环双向链表 带头:含哨兵位 循环:尾节点的next指针指向哨兵位 双向:每个节点具有两个指针域,一个指针指向前一个结点 2…...

Qt+海康虚拟相机的调试

做机器视觉项目的时候,在没有相机或需要把现场采集的图片在本地跑一下做测试时,可以使用海康的虚拟相机调试。以下是设置步骤: 1.安装好海康MVS软件,在菜单栏->工具选择虚拟相机工具,如下图: 2.打开虚拟…...

数据库基础练习4(有关索引,视图完整解答)

建立需要的表 学生表 mysql> create table studnet(sno int primary key auto_increment,sname varchar(30) not null unique,ssex varchar(2) check (ssex男 or ssex女) not null ,sage int not null,sdept varchar(10) default 计算机 not null); Query OK, 0 rows affe…...

实操给触摸一体机接入大模型语音交互

本文以CSK6 大模型开发板串口触摸屏为例,实操讲解触摸一体机怎样快速增加大模型语音交互功能,使用户能够通过语音在一体机上查询信息、获取智能回答及实现更多互动功能等。 在本文方案中通过CSK6大模型语音开发板采集用户语音,将语音数据传输…...

Excel中对单列数据进行去重筛选

在Excel中对单列数据进行去重筛选,可以按照以下步骤操作: 方法一:使用“删除重复项”功能 选择数据列:点击要处理的列头(如A列)。打开“删除重复项”: Excel 2007及以后版本:点击“…...

K8s —基础指南(K8s - Basic Guide)

K8s —基础指南 K8s 是云上部署容器化应用的事实标准。它作为容器的强大编排器,管理容器重启、负载均衡等任务。 理解 Kubernetes 架构 Kubernetes 的关键功能之一是为访问 Pod 提供稳定的端点,尽管 Pod 本身是短暂的。Kubernetes 服务有效地弥补了这…...

ABAP开发中的前导零和末尾零

前导零和末尾零是指分别出现在数字序列中第一个非零数字之前和最后一个非零数字之后的任何零数字。 关于前导 0 在 SAP 系统中,大多数字母数字字段在数据库中存储时都带前导零,完全占用字段的定义长度。但是,当字段显示给最终用户时&#x…...

Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路

内容概要 随着数字化时代的不断发展,用户对内容消费的需求日益多样化,个性化推荐成为提升用户体验的重要手段。Baklib以其先进的技术手段,在数字内容领域内积极推动个性化推荐的实施,从而满足用户在信息获取和内容消费中的独特需…...

关于Redis的持久化

目录 RDB 1.手动触发 2.自动触发 AOF aof的重写机制 Redis虽然是一个内存数据库,但是也是可以将数据存储到硬盘中的,也就是持久化。硬盘的数据是在Redis重启的时候,用来恢复内存中的数据的,即对数据做了一个备份。Redis实现持…...

【C语言标准库函数】指数与对数函数:exp(), log(), log10()

目录 一、头文件 二、函数简介 2.1. exp(double x) 2.2. log(double x) 2.3. log10(double x) 三、函数实现(概念性) 3.1. exp(double x) 的模拟实现 3.2. log(double x) 和 log10(double x) 的模拟实现 四、注意事项 4.1. exp(double x) 的注…...

2024美团春招硬件开发笔试真题及答案解析

目录 一、选择题 1、在 Linux,有一个名为 file 的文件,内容如下所示: 2、在 Linux 中,关于虚拟内存相关的说法正确的是() 3、AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了()。 4、下列关于8051单片机的结构与功能,说法不正确的是()? 5、…...

Linux中shell编程表达式和数组讲解

一、表达式 1.1 测试表达式 样式1: test 条件表达式 样式2: [ 条件表达式 ] 注意:以上两种方法的作用完全一样,后者为常用。但后者需要注意方括号[、]与条件表达式之间至少有一个空格。test跟 [] 的意思一样条件成立,状态返回值是0条件不成…...

关于事务的简介

一、引言​ 在数据处理与存储的领域中,事务(Transaction)是确保数据完整性和一致性的关键概念。无论是金融系统的资金转账、电商平台的订单处理,还是企业资源规划(ERP)系统的业务流程操作,事务都…...

Redis底层数据结构之深入理解跳表(2)

上一篇文章中我们详细讲述了跳表的增添、查找和修改的操作,这篇文章我们来讲解一下跳表在多线程并发时的安全问题。在Redis中,除了网络IO部分和大文件的后台复制涉及到多线程外,其余任务执行时全部都是单线程,这也就意味着在Redis…...

第1章_数据分析认知_知识点笔记

来自:数据分析自学课程-戴戴戴师兄 逐字稿:【课程4.0】第1章_分析认知_知识点笔记 【课程4.0】第1章 分析认知 知识点总结 数据分析的核心价值不是工具,而是用数据驱动业务增长。 一、数据分析的本质认知 数据分析是什么? 不是酷…...

Selenium自动下载浏览器驱动

为什么需要自动下载浏览器驱动? 血泪场景重现 新人入职第一天: 花3小时配置Chrome/Firefox驱动版本不匹配导致SessionNotCreatedException 浏览器自动更新后: 所有测试脚本突然崩溃手动查找驱动耗时长 终极解决方案:自动下载驱…...

六级作文模板笔记

旧模板 Today there is a growing awareness that mental well-being needs to be given as much attention as physical health. In the contemporary world where change is constant and knowledge is ever-expanding, mental well-being has become increasingly importan…...

Python打卡训练营day46——2025.06.06

知识点回顾: 不同CNN层的特征图:不同通道的特征图什么是注意力:注意力家族,类似于动物园,都是不同的模块,好不好试了才知道。通道注意力:模型的定义和插入的位置通道注意力后的特征图和热力图 …...

AI系统负载均衡与动态路由

载均衡与动态路由 在微服务架构中,负载均衡是实现服务高可用和性能优化的关键机制。传统负载均衡技术通常围绕请求数、连接数、CPU占用率等基础指标进行分发,而在AI系统中,特别是多模型、多异构算力(如CPU、GPU、TPU)共存的环境下,负载均衡不仅要考虑节点资源消耗,还需…...

LabVIEW自感现象远程实验平台

LabVIEW开发自感现象远程实验平台,通过整合 NI数据采集设备、菲尼克斯(Phoenix Contact)继电器模块及罗技(Logitech)高清摄像头,实现远程数据采集、仪器控制与实时监控三大核心功能。平台突破传统实验装置局…...

KMP 算法中 next 数组的构建函数 get_next

KMP 算法中 next 数组的构建函数 get_next ,负责计算模式串的 next 数组,核心是通过递推找到每个位置的 “最长相等前缀后缀长度”。(下标从 1 开始): 一、函数作用 get_next(SString T, int next[]) 的任务&#xf…...