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

news2024/11/18 13:34:08

目录

前言

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.coloradmin.cn/o/694782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HOT23-反转链表

leetcode原题链接:反转链表 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2: 输入:head [1,2] 输…

Spring Boot 中的缓存注解

Spring Boot 中的缓存注解 在 Spring Boot 中,缓存是一个非常重要的话题。当我们需要频繁读取一些数据时,为了提高性能,可以将这些数据缓存起来,避免每次都从数据库中读取。为了实现缓存,Spring Boot 提供了一些缓存注…

电脑大文件夹怎么加密?大文件夹方法介绍

当我们把电脑中的各种数据分类存放在文件夹中时,可以方便我们使用和管理。但这些文件夹也会变得十分庞大,如果想要加密它们,就需要使用更快速、安全的方法。下面我们来了解一下电脑大文件夹的加密方法。 文件夹加密超级大师 文件夹加密超级大…

享元模式的学习与使用

1、享元模式的学习 当我们需要创建大量相似的对象时,享元模式(Flyweight Pattern)可以提供一种有效的解决方案。享元模式旨在通过共享对象来最小化内存使用和提高性能。它将对象分为可共享的内部状态(Intrinsic State)…

websocket前端的连接与接收数据

什么是websocket 1, WebSocket是一种用于在客户端和服务器之间进行全双工通信的网络协议。它使得在单个TCP连接上可以进行双向通信,允许服务器主动地发送数据给客户端,同时客户端也可以向服务器发送数据。与传统的HTTP请求-响应模型不同,Web…

百度排名代发收录怎么上百度

百度排名代发收录怎么上百度,如何提高百度排名,网站提高排名最新手册!#seo 今天来点不一样的,就是讲一下百度竞价里边最基础也是最容易踩的一个坑,就是我发现很多人很喜欢把自己推广的产品或者说业务直接作为关键词上…

OpenAI 发布的新语音系统Whisper能力到底有多强?

OpenAI 最近发布了一个名为Whisper 的自动语音识别系统,声称其在英语语音识别方面已经接近人类水平的鲁棒性和准确性。这个系统使用了68万小时多任务监督数据来进行训练,并且在处理口音、背景噪音和技术语言等复杂场景时表现出了很好的鲁棒性。那么&…

s3 删除事故?

起因 一次巡检s3备份查看时, 一回车手滑,出现了下面这种画面,生产事故?!!! 现象 aws s3 rm s3://gfai-hk/upload.cmd 证实的确被删除了,推断后面的生产数据也被全删, 尝试用s3命令恢复发现需要该对象开启版本控制, rm被删除才有可能找回,否则永久删除于是尝试下面的命令 先…

跟着李沐学AI(动手学深度学习 PyTorch版)学习笔记——02深度学习介绍

1.课程安排大概共34天的课-(计划7月底看完,争取做到最少两天一更) 2.动手学深度学习课本教材 3.课程谈论坛 4.pytorch论坛 一、 目标 二、内容 三、 学习目标: 四、简单了解深度学习 深度学习: 图片分类物体的检测和…

华为OD机试真题 Python 实现【区间连接器】【2023Q1 200分】,附详细解题思路

一、题目描述 有一组区间 [a0, b0], [a1, b1], … (a, b 表示起点, 终点),区间有可能重叠、相邻,重叠或相邻则可以合并为更大的区间; 给定一组连接器[x1, x2, x3, …](x 表示连接器的最大可连接长度,即 x>gap&…

python网络编程笔记(一)

一:Socket简介 套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSD Unix。因此,有时人们也把套接字称为“伯克利套接字"或"BSD套接字”。一开始,套接字被设计用在同 -台主机上多个应用程序之间的通讯BSD Socket接口是TCP/IP网…

ArcMap发布arcgis sever缓存瓦片服务

1.全能电子地图下载瓦片地图 2.地图拼接 acrgis sever缓存瓦片 下载完成的文件目录 3.arcMap添加数据 连接本地文件 这一步有坑,一定要加载到瓦片最外层目录,否则看不到图层文件。 找到图层数据,点击添加 添加数据完成,开始发布服…

数字化和物联网的发展如何改变我们的生活方式?

数字化和物联网 (IoT) 的发展已经给我们的生活方式带来了重大变化,而且这些变革将在未来继续发生。以下是数字化和物联网影响我们生活的一些方式: 连接设备和智能家居:物联网使日常物品能够连接到互联网并相互通信。这种连通性允许创建智能家…

记录一次oracle报错IMP-00058: 遇到 ORACLE 错误 904 ORA-00904: “xxx“: 标识符无效

错误原因:导入的表中缺少DATASRC字段 解决方法:在要导入的表中加上DATASRC字段

对 React 状态管理的理解及方案对比

1、React 状态、通信 React 为什么需要状态管理 React 特点: 专注 view 层:专注 view 层 的特点决定了它不是一个全能框架,相比 angular 这种全能框架,React 功能较简单,单一。UIrender(data)UIrender(data)&#x…

Keras-深度学习-神经网络-人脸识别模型

目录 模型搭建 模型训练 模型搭建 ①导入所需的库,导入了 Keras 和其他必要的库,用于构建和处理图像数据。 from keras.models import Sequential from keras.layers import Dense, Flatten, Conv2D, MaxPooling2D import os from PIL import Image …

《C++高级编程》读书笔记(十二:利用模板编写泛型代码)

1、参考引用 C高级编程(第4版,C17标准)马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门,笔记链接如下 21天学通C读书笔记(文章链接汇总) 1. 模板概述 模板将参数化的概念推进了一步,不仅允许…

用Python搭建监控平台详解

概要 监控和运维,是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控,我们能够及时了解到企业网络的运行状态。一旦出现安全隐患,你就可以及时预警,或者是以其他方式通知运维人员,让运维监控人员有时…

oracle 自定义类型(type)的用法

emp表数据如下所示 定义object类型 create or replace type typeof_userinfo_row as object(user_id varchar2(50),user_name varchar2(50) )创建函数并将此类型作为返回值类型 create or replace function FUN_TEST return typeof_userinfo_row isFunctionResult typeof_use…

互联网业务全球化互通组网

随着互联网业务的快速发展,越来越多的企业开始全球化扩张业务,并需要在全球范围内建立互联网组网以实现业务数据的高效传输。在这个过程中,如何建立高效、稳定的全球互联网组网方案,是每个企业都需要考虑的问题。 一种可行的方案…