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

【bug】antd全局的主题色样式被覆盖,被修改为`antd`默认的主题色

背景:

项目本身修改了主题色,配置如下:

// umi配置文件
export default {theme: {'primary-color': '#2F54EB', // 全局主色},
};

需要对图片上传组件做封装,并在项目中统一引用,如下

import { TdsUpload } from 'tdsComponents;

环境信息

node

tiands@tiandsdeMacBook-Pro demo-doc % node -v
v14.18.1
tiands@tiandsdeMacBook-Pro demo-doc % npm -v
6.14.15

组件打包

组件使用father(^4.1.0)进行打包

问题描述

对问题的表现的描述

进入引用了TdsUpload的页面时,全局的主题色样式被覆盖,被修改为antd默认的主题色
在这里插入图片描述


原因分析

对问题的初步判断

根据现象判断,可能是组件内引用了antd组件的样式覆盖了项目内的样式,导致主题色被污染


解决流程

如何定位并解决问题

根据初步的原因分析,可能是组件打包时打包了antd的样式文件,查看father的打包配置[2],修改了打包时注入的 Less 变量,使其和主项目保持一致,这样即使覆盖了也不影响,修改如下(并无效果):

// father配置文件 .fatherrc.ts
import { defineConfig } from 'father';
export default defineConfig({esm: { output: 'dist' },umd: {theme: {'primary-color': '#2F54EB', // 全局主色},},
});

既然less变量影响不了,那我直接不打包antd不就好了,修改配置如下:

import { defineConfig } from 'father';
export default defineConfig({esm: { output: 'dist' },umd: {externals: {antd: 'antd',},},
});

依旧不好使,这时候我怀疑是不是配置里面哪里引入了antd没有删除干净,所以我在项目内搜索了关键字“antd”,然后无意间在某个组件内发现如下代码:

import 'antd/dist/antd.css'; 

解决方案

这里是该问题的具体解决方案

删除非必要的antd.css引入

import 'antd/dist/antd.css'; // 删除此行
import React from 'react';
import { Row, Col } from 'antd';
import styles from './index.less';

深度思考

在解决流程的第一步就可以发现,修改变量对结果毫无影响,这时就可以猜测不是打包的影响了
应该使用控制变量法,对自己的猜测进行验证(直接不打包,看是否有影响)

参考资料

  1. 如何验证程序是否完成,测试以及修正Bug?

  2. father的打包配置

http://www.lryc.cn/news/35808.html

相关文章:

  • MySQL DDL表操作【入门到精通】
  • 《MySQL系列-InnoDB引擎28》表-约束详细介绍
  • 使用docker部署宝塔环境
  • ORB_SLAM2+kinect稠密建图
  • mujoco安装及urdf转xml方法记录
  • Visual Studio 2019 + Qt 项目版本信息新增到资源以及通过代码读取资源存储的版本信息
  • 裸辞两个月还能不能找到工作?亲身经历告诉你结果·····
  • 2023华为面试真题
  • 【C++】C++11新特性——基础特性
  • Mac 遇到pip: command not found问题的解决
  • [ 云计算 | Azure ] Episode 03 | 描述云计算运营中的 CapEx 与 OpEx,如何区分 CapEx 与 OpEx
  • STM32F103R8T6 SPWM实现正弦波输出
  • Oracle 11g创建和删除数据库实例
  • MySQL(四)视图、存储过程、触发器
  • 在 Ubuntu 下编写 C++
  • Linux主要目录的意思
  • 启动golang项目编译的exe可执行文件获取windows管理员权限(UAC)
  • Springboot怎么快速集成Redis?
  • COM技术简单介绍
  • NetworkMiner网络取证分析工具(26)
  • Lombok 常用注解
  • SAP 生产订单和成本收集器在核算上的主要区别
  • Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
  • 【大数据处理与可视化】一 、大数据分析环境搭建(安装 Anaconda 3 开发环境)
  • Python3-输入和输出
  • Java后端通用接口设计
  • 万字长文带你走进MySql优化(系统层面优化、软件层面优化、SQL层面优化)
  • 云原生安全2.X 进化论系列|云原生安全2.X未来展望(4)
  • 认识进程 -了解进程调度
  • 第十届省赛——7外卖店优先级