无界构建微前端?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 --> 很多人感觉不是微前端 --> 去中心化方…...
数据留痕的方法
在项目中,数据变更时,经常需要记录上次的数据,以便查看对比,专业术语叫做数据留痕。数据变更留痕(即记录数据的变更历史)是一个常见的需求,例如在审计、追踪数据变化或满足合规性要求的场景中。…...
Glustefs 服务端配置流程
Glustefs 服务端配置流程 (一)环境搭建 名称ip硬件设备文件虚拟机 gluster1192.168.101.12G新磁盘/dev/sdb虚拟机 gluster2192.168.101.22G新磁盘/dev/sdb虚拟机 gluster3192.168.101.32G新磁盘/dev/sdb (二)磁盘格式化&#x…...
为飞牛OS基于FRP的内网穿透开启HTTPS加密
前言 玩NAS的朋友应该有比较多只是在家庭局域网使用,比如日常看看电影、备份手机照片什么的,这属于家庭局域网的使用场景。 当然了,如果你经常出差,或者过年回家不想把NAS也背回去,或者是想上班摸鱼,或者是…...
《基于Python与DashScope的智能语音合成工具开发》
《基于Python与DashScope的智能语音合成工具开发》 在当今数字化时代,语音合成技术已经广泛应用于各种场景,如智能语音助手、有声读物、导航系统等。本文将介绍如何使用Python和DashScope平台开发一个简单而功能强大的文字转语音工具。通过这个工具&…...
快速上手Vim的使用
Vim Linux编辑器-vim使用命令行模式下所有选项都可以带数字底行模式可视块模式(ctrlV进入) Linux编辑器-vim使用 Vim有多种模式的编辑器。能帮助我们很快的进行代码的编辑,甚至完成很多其他事情。 默认情况下我们打开vim在命令模式下&#x…...
vue学习第四天 v-on事件绑定
v-on绑定事件如下,点击按钮会弹出alert v-on:事件具体名称“事件调用的函数名” 事件调用的函数写在methods里面 在methods属性的函数里,可以用this获取data的数据,this代表的就是整个vue实例 用this.age就可以拿到age࿰…...
2.8寒假作业
web:[HNCTF 2022 Week1]2048 之前也做过类似的题目,之前的解法是直接get传参score20000,可以尝试 打开环境看源代码,直接改源代码显然是不行的,那么用一下上面的办法也不行,估计是要改其他方向的ÿ…...
PyTorch torch.sign函数介绍
torch.sign 是 PyTorch 库中用于计算输入张量每个元素符号的函数。下面从功能概述、函数原型、参数解释、返回值、使用示例以及与相关函数对比等方面详细介绍 torch.sign。 功能概述 torch.sign 函数会返回一个与输入张量形状相同的新张量,其中每个元素的值表示输…...
Formality:时序变换(五)(寄存器复制)
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 一、引言 时序变换在Design Compiler的首次综合和增量综合中都可能发生,它们包括:时钟门控(Clock Gating)、寄存器合并(Register Merging)、…...
音频知识基础
音频知识基础 声音属性声音度量人耳特性通道数音频数字化传输接口 声音属性 响度 响度是人耳对声音强弱的主观感受; 主要和声波的振幅相关,同时也和频率有一定关系; 音调 音调是人耳对声音高低的主观感受; 主要与频率相关&#…...
科技赋能数字内容体验的核心技术探索
内容概要 在数字化时代,科技的迅猛发展为我们的生活和工作带来了深刻的变革。数字内容体验已经成为人们获取信息和娱乐的重要途径,而这背后的技术支持则扮演着至关重要的角色。尤其是在人工智能、虚拟现实和区块链等新兴技术的推动下,数字内…...
DeepSeek-R1 本地大模型搭建对接API
DeepSeek-R1 在这里将学到很多知识 欢迎使用使用DeepSeek-R1本地大模型DeepSeek 的模型基础说明DeepSeek的本地 API 说明DeepSeek 本地模型搭建1、执行命令安装及测试 DeepSeek-R1 API接口调用当然,我们为了让用户更加便捷,我们把API 接口全部放到上面截…...
利用NestJS构建高效的RESTful API接口
1. 引言 项目背景与目标 随着互联网应用的快速发展,RESTful API已成为前后端分离架构中的重要组成部分。本文将介绍如何使用NestJS构建一个高效且可维护的RESTful API接口。目标是通过NestJS的模块化和依赖注入特性,实现一个易于扩展和维护的API系统。 RESTful API的重要性…...
redis高级数据结构布隆过滤器
文章目录 背景什么是布隆过滤器Redis 中的布隆过滤器布隆过滤器使用注意事项实现原理空间占用估计 背景 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。问题来了,新闻…...
《Wiki.js知识库部署实践 + CNB Git数据同步方案解析》
一、wiki.js 知识库简介 基本概述 定义 :Wiki.js 是一个开源、现代、轻量且功能强大的 Wiki 应用程序,基于 Node.js 构建,旨在帮助个人和团队轻松创建、管理和共享知识。开源性质 :它遵循 AGPLv3 许可证,任何人都可以…...
CSS Overflow 属性详解:控制内容溢出的利器
在前端开发中,处理内容溢出是一个常见的需求。CSS 提供了 overflow 属性,帮助我们控制当内容超出元素框时的显示方式。本文将详细介绍 overflow 属性的各种取值及其应用场景。 1. 什么是 overflow 属性? overflow 属性用于控制当元素的内容…...
.yml文件_YAML格式文件
.yml 文件是 YAML(YAML Ain’t Markup Language)格式的一种文件扩展名。YAML 是一种用于数据序列化的语言,通常用于配置文件、数据交换、日志记录等场景。它以可读性高、简洁的格式为特点,非常适合用于人类阅读和编写。YAML 通常被…...
根文件系统 Debian10【1】移植
1.开发背景 一般根文件系统使用 Busybox 或者是 Buildroot 构建,这样构建出来的文件系统比较小,但是不具备上网功能,扩展性比较差。随着 ARM 的日益强大,ARM 可以搭载更庞大复杂的系统,可以是 Ubuntu 或者 Debian 等发…...
【PyQt】实现格式刷功能
实现格式刷功能 在Qt Designer中直接实现格式刷功能并不支持,但可以通过以下方法在应用程序中实现类似功能: 一、Qt Designer中的替代方案 1.手动设置样式表 在属性编辑器中复制样式表(QSS)内容,粘贴到其他控件。 …...
Could not create task ‘:mainActivity:minifyReleaseWithR8‘.
最近接收了一个老项目,把项目clone下来后,总是报错,无法运行 Build-tool 33.0.1 is missing DX at D:\Android\Sdk\build-tools\33.0.1\dx.batFAILURE: Build failed with an exception.* What went wrong: Could not determine the depende…...
2025年日祭
本文将同步发表于洛谷(暂无法访问)、CSDN 与 Github 个人博客(暂未发布) 本蒟自2025.2.8开始半停课。 任务计划(站外题与专题) 数了一下,通过人数比较高的题,也就是我准备补的题&a…...
二维dp-地图
问题描述 传说,在蓝桥王国中一个极其神秘的森林。这个森林的起点在(1,1) ,终点在 (n,m)。在你进入这个森岭后,每次你只可以向下或者向右走,由于森岭的神秘力量,至多只可以改变 k 次方向。 小蓝现在想知道,…...
Windows下AMD显卡在本地运行大语言模型(deepseek-r1)
Windows下AMD显卡在本地运行大语言模型 本人电脑配置第一步先在官网确认自己的 AMD 显卡是否支持 ROCm下载Ollama安装程序模型下载位置更改下载 ROCmLibs先确认自己显卡的gfx型号下载解压 替换替换rocblas.dll替换library文件夹下的所有 重启Ollama下载模型运行效果 本人电脑配…...
el-table表格点击单元格实现编辑
使用 el-table 和 el-table-column 创建表格。在单元格的默认插槽中,使用 div 显示文本内容,单击时触发编辑功能。使用 el-input 组件在单元格中显示编辑框。data() 方法中定义了 tableData,tabClickIndex: null,tabClickLabel: ,用于判断是否…...
数据库操作与数据管理——Rust 与 SQLite 的集成
第六章:数据库操作与数据管理 第一节:Rust 与 SQLite 的集成 在本节中,我们将深入探讨如何在 Rust 中使用 SQLite 数据库,涵盖从基本的 CRUD 操作到事务处理、数据模型的构建、性能优化以及安全性考虑等方面。SQLite 是一个轻量…...
Ubuntu 24.10 安装Deepseek(Ollama+openwebui)
一、Ollama安装 1.在线安装 curl -fsSL https://ollama.com/install.sh | sh 如果curl工具没有安装先执行如下命令 sudo apt install curl 验证curl是否安装成功 curl --version 安装的过程中会提示输入当前系统登录用户的密码。 安装提示success后,验证安装 ollama -…...
【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)
偏差和方差的权衡(Bias-Variance Tradeoff) 1. 引言 在机器学习模型的训练过程中,我们常常面临一个重要的挑战:如何平衡 偏差(Bias) 和 方差(Variance),以提升模型的泛…...
STM32的HAL库开发---高级定时器---输出比较模式实验
一、高级定时器输出比较模式实验原理 定时器的输出比较模式总共有8种,本文使用其中的翻转模式,当TIMXCCR1TIMXCNT时,翻转OC1REF的电平,OC1REF为输出参考信号,高电平有效,OC1REF信号连接到0C1上面ÿ…...
[论文阅读] Knowledge Fusion of Large Language Models
Knowledge Fusion of Large Language Models (FuseLLM) Methodology 整体Pipeline如下图所示 不同的动物代表不同的LLM。左边第一,第二分别是Ensemble以及Weight Merging方法。最右侧为本文提出的FuseLLM。 Ensemble: 融合多个models的预测结果,比如…...
