【qiankun】前端微服务架构踩坑记录

目录

前言

1.Cannot GET /cooperation/board

场景:

分析

解决

2.Invalid options in vue.config.js:"css.requireModuleExtension" is not allowed

原因

解决

3.less版本升级导致除法写法未转换

原因

解决

4.主子应用样式隔离

场景

解决

5.在webpack5中配置output报错

报错如下

 原因

 解决

6.微应用部署后报错

场景

报错如下

 原因

解决


前言

最近公司前端项目在重构,我经过调研后架构确定为bff+qiankun微服务。bff还没开始呢,微服务这块遇到了很多问题,也使用了一段时间了,临时总结一下:

1.部署阶段最容易踩坑

2.是路由切换问题容易踩坑

3.主应用和子应用之间的依赖冲突和样式冲突

以后会持续更新~


1.Cannot GET /cooperation/board

场景:

主应用载入子应用资源时,找不到子应用资源。

分析

 在分析原因的过程中,并没有在 webpack5 的配置中找到原因,考虑到使用的是 vue-cli 脚手架,然后脚手架使用的 webpack5 , 所以搜索了 vue-cli的改动记录。

在这个PR中找到了原因。 fix(cli-service): restrict request headers of historyApiFallback in WebpackDevServer by githoniel · Pull Request #6162 · vuejs/vue-cli · GitHub

this PR will restrict request headers 
of historyApiFallback only work with 
[ 'text/html', 'application/xhtml+xml']

解决

qiankun加载子应用时发起的fetch请求,且请求头里面没有 text/html 等header。所以historyApiFallback 配置对它无效。而本项目又是 history 模式路由,所以带路由 /xxx/xxx 过来请求,就会 404.

修改方案为自己传入historyApiFallback 配置.

 historyApiFallback: {index: '/xxx/index.html' // xxx为路径,和打包output配置有关},


2.Invalid options in vue.config.js:"css.requireModuleExtension" is not allowed


原因

此问题为 vue-cli 升级导致的。

有个微应用使用了 css modules 方案,配置了 在 vue.config.js 中配置了 css.requireModuleExtension ,而该字段在 V5 版本中已经移除。"css.requireModuleExtension" is not allowed · Issue #6607 · vuejs/vue-cli · GitHub 。用以下 css-loader配置来替代。

解决

module.exports = {css: {loaderOptions: {css: {modules: {auto: () => true}}}}
}

3.less版本升级导致除法写法未转换

原因

此问题是 less 版本升级导致。

其原因是 Less.js 用法 | Less.js 中文文档 - Less 中文网 , 4.x 中修改了math的默认配置。 (@m-gap / 2) 或者 (@m-gap ./ 2) 才会默认转换。

解决

 有个微应用 less版本由 3.x 升级到 4.x 后,发现样式有问题。 后定位发现 padding: @m-gap / 2 @m-gap; 转换为了 padding: 16px / 2 16px,除法未做计算。


4.主子应用样式隔离

场景

一个典型的场景是主应用使用vue3+elementplus,子应用使用vue2+elementUI.首先说明一点乾坤对于子应用之间是自带样式隔离的,但是主子应用之间没有,那这不可避免地带来样式冲突问题(也包括第三方样式库,比如elementui)

解决

 解决方式有3种,第一种是手动设置样式名(不好用),第二种是使用css moducles 插件

我使用的第三种,在elementplus的2.2版本及以上有了命名空间,可以给所有的样式修改一个前缀,比如说:.el-button,我们可以换成ep-button,这样就避免了主应用和子应用使用相同的样式库带来的冲突问题


5.在webpack5中配置output报错

报错如下

 原因

jsonpFunction在webpack5被chunkLoadingGlobal替代

 解决

configureWebpack: {output: {library: `${name}-[name]`,//6.接入乾坤libraryTarget: 'umd', // 把微应用打包成 umd 库格式chunkLoadingGlobal: `webpackJsonp_${name}`, //   jsonpFunction在webpack5: `webpackJsonp_${name}`,// jsonpFunction在webpack5被chunkLoadingGlobal替代},},

6.微应用部署后报错

场景

部署后刷新页面,url地址栏 回车时报错

报错如下

关键字:Expected a JavaScript module script but the server responded with a MIME type of

 原因

vite静态资源路径配置问题

解决

publicpath之前是‘ ./’改为‘/’ 

官方文档说的是‘./’用于开发环境的

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

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

相关文章

【Web3】认识区块链

目录 区块链特征 区块链类型 区块链的概念 区块链特征 去中心化:区块链是由一个分布在多个参与者之间的网络组成,没有中央机构或中介控制整个系统。所有参与者共同维护和验证账本的完整性,减少了单点故障和集中式控制的风险。共识机制&…

【案例实战】SpringBoot整合Redis的GEO实现查找附近门店功能

像我们平常美团点外卖的时候,都会看到一个商家距离我们多少米。还有类似QQ附近的人,我们能看到附近的人距离我们有多少米。 那么这些业务是怎么做的呢?是如何实现 基于位置的附近服务系统呢。 在去了解基于位置的附近服务之前,我…

时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测

时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测 目录 时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测预测效果基本介绍模型介绍PSO模型GRU模型PSO-GRU模型 程序设计参考资料致谢 预测效果 基本介绍 Matlab基于PSO-GRU粒子群算法优化门…

熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践

目录导读 熔断降级与限流在开源SpringBoot/SpringCloud微服务框架的最佳实践1. 开源代码整体架构设计2. 微服务逻辑架构设计3. 微服务熔断降级与限流规划3.1 微服务熔断降级与限流场景分析3.2 微服务熔断降级与限流技术栈规划3.3 微服务熔断降级与限流技术选型3.3.1 熔断降级中…

.NET Core webapi 从零开始在IIS上面发布后端接口

文章目录 原因环境配置windows环境.NET Core安装开发端安装服务端安装 新建ASP.NET项目 原因 .NET core是以后.NET未来的趋势,虽然我感觉Java在web后端的主导地位10年内不会动摇,因为Java占据了先发优势。 不过C#的特点就是,简单&#xff0…

机器学习实战8-基于XGBoost和LSTM的台风强度预测模型训练与应用

大家好,我是微学AI,今天给大家介绍一下机器学习实战8-基于XGBoost和LSTM的台风强度预测模型训练与应用,今年夏天已经来了,南方的夏天经常会有台风登陆,给人们生活带来巨大的影响,本文主要基于XGBoost模型和…

什么是网络安全?

文章目录 一、概述1.1 网络安全的指标1.2 网络安全的特征 二、网络安全威胁2.1 黑客能破坏的2.2 Internet安全手段2.2.1 端口扫描2.2.2 分组嗅探sniffing2.2.3 IP欺骗Spoofing 2.3 Internet安全威胁2.3.1 DOS拒绝服务 三、密码学3.1 对称加密算法3.1.1 传统加密3.1.2 现代加密技…

uniapp实现腾讯地图定位,生成点,多点连线,清空点线,卫星地图等功能

功能: 1.地图上标点,点有内容,点击点后可以查看点的信息,详情 2.点击地图生成点,点击多个点后可以实现点连线功能 3.点击按钮后,可以把生成的点清空 4.卫星地图和默认地图切换功能 1.完整代码字段讲解 1.…

数据结构--二叉树的定义和基本术语

数据结构–二叉树的定义和基本术语 二叉树的基本概念 二叉树是 n ( n ≥ 0 ) n (n\ge0) n(n≥0)个结点的有限集合: ①或者为 空二叉树 \color{red}空二叉树 空二叉树,即n 0。 ②或者由一个 根结点 \color{red}根结点 根结点和两…

什么是分布式软件系统

:什么是分布式软件系统?分布式软件系统是什么意思? 分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式操作系统、分布式程序设计语言及其编译(解释)系统、分…

Mysql,使用 UNION ALL 处理 ‘无中生有‘ 的数据。

在日常的开发工作中,有时我们需要在SQL层面添加一些数据库表中没有的数据,那么我们就可以使用 UNION ALL 关键字来解决。 一、简单的无中生有:在查询返回结果中添加数据 以下方的SQL1为例,我们根据 id 查询 user 表中的数据&#…