antd 在webpack.config配置主题色
虽然官方提供了craco-less 来 覆盖less-loader 提供的 less 变量,但自己也想试着修复config来配置一下
首先需要运行 yarn eject 来暴露webpack的配置
 其次需要安装less-loader(注意这个需要在3以下) 和 babel-plugin-import
yarn add less@^2.7.3
yarn add babel-plugin-import
然后打开webpack.config.js
一、配置babel全局引入antd.css
在对应的 test: /\.(js|mjs|jsx|ts|tsx)$/, 方法的plugins中增加
      ['import',{
        libraryName:'antd',
        style:true
      }],
修改后如下
    // Process application JS with Babel.
    // The preset includes JSX, Flow, TypeScript, and some ESnext features.
    {
      test: /\.(js|mjs|jsx|ts|tsx)$/,
      include: paths.appSrc,
      loader: require.resolve('babel-loader'),
      options: {
        customize: require.resolve(
          'babel-preset-react-app/webpack-overrides'
        ),
        presets: [
          [
            require.resolve('babel-preset-react-app'),
            {
              runtime: hasJsxRuntime ? 'automatic' : 'classic',
            },
          ],
        ],
        plugins: [
          [
            require.resolve('babel-plugin-named-asset-import'),
            {
              loaderMap: {
                svg: {
                  ReactComponent:
                    '@svgr/webpack?-svgo,+titleProp,+ref![path]',
                },
              },
            },
          ],
          ['import',{
            libraryName:'antd',
            style:true
          }],
          isEnvDevelopment &&
            shouldUseReactRefresh &&
            require.resolve('react-refresh/babel'),
        ].filter(Boolean),
        // This is a feature of `babel-loader` for webpack (not Babel itself).
        // It enables caching results in ./node_modules/.cache/babel-loader/
        // directory for faster rebuilds.
        cacheDirectory: true,
        // See #6846 for context on why cacheCompression is disabled
        cacheCompression: false,
        compact: isEnvProduction,
      },
    },
二、增加less-loader
在
// style files regexes
const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
代码中增加less 正则变量
// style files regexes
const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;
然后拷贝一份如下配置css-loader代码
    // "postcss" loader applies autoprefixer to our CSS.
    // "css" loader resolves paths in CSS and adds assets as dependencies.
    // "style" loader turns CSS into JS modules that inject <style> tags.
    // In production, we use MiniCSSExtractPlugin to extract that CSS
    // to a file, but in development "style" loader enables hot editing
    // of CSS.
    // By default we support CSS Modules with the extension .module.css
    {
      test: cssRegex,
      exclude: cssModuleRegex,
      use: getStyleLoaders({
        importLoaders: 1,
        sourceMap: isEnvProduction
          ? shouldUseSourceMap
          : isEnvDevelopment,
      }),
      // Don't consider CSS imports dead code even if the
      // containing package claims to have no side effects.
      // Remove this when webpack adds a warning or an error for this.
      // See https://github.com/webpack/webpack/issues/6571
      sideEffects: true,
    },
    // Adds support for CSS Modules (https://github.com/css-modules/css-modules)
    // using the extension .module.css
    {
      test: cssModuleRegex,
      use: getStyleLoaders({
        importLoaders: 1,
        sourceMap: isEnvProduction
          ? shouldUseSourceMap
          : isEnvDevelopment,
        modules: {
          getLocalIdent: getCSSModuleLocalIdent,
        },
      }),
    },
修改后,然后将其追加到上面的css-loader之后即可
 // add less-loader options
  {
    test: lessRegex,
    exclude: lessModuleRegex,
    use: getStyleLoaders({
      importLoaders: 2,
      sourceMap: isEnvProduction
        ? shouldUseSourceMap
        : isEnvDevelopment,
    },
    'less-loader'),
    sideEffects: true,
  },
  // Adds support for less Modules
  // using the extension .module.less
  {
    test: lessModuleRegex,
    use: getStyleLoaders({
      importLoaders: 2,
      sourceMap: isEnvProduction
        ? shouldUseSourceMap
        : isEnvDevelopment,
      modules: {
        getLocalIdent: getCSSModuleLocalIdent,
      }
    },
    'less-loader' )
  },
三、配置lessOptions
1、修改less-loader
这个直接在less-loader后面追加如下代码
   lessOptions:{
     modifyVars: { '@primary-color': '#f9c700' },
     javascriptEnabled: true,
   }
修改后的less-loader
     // add less-loader options
     {
       test: lessRegex,
       exclude: lessModuleRegex,
       use: getStyleLoaders({
         importLoaders: 2,
         sourceMap: isEnvProduction
           ? shouldUseSourceMap
           : isEnvDevelopment,
       },
       'less-loader',
       {
         lessOptions:{
           modifyVars: { '@primary-color': '#f9c700' },
           javascriptEnabled: true,
         }
       }
       ),
       sideEffects: true,
     },
2、修改getStyleLoaders
再修改getStyleLoaders方法为其增加一个参数
  const getStyleLoaders = (cssOptions, preProcessor,params={}) => {
    if (preProcessor) {
      loaders.push(
        {
          loader: require.resolve('resolve-url-loader'),
          options: {
            sourceMap: isEnvProduction ? shouldUseSourceMap : isEnvDevelopment,
            root: paths.appSrc,
          },
        },
        {
          loader: require.resolve(preProcessor),
          options: {
            sourceMap: true,
            ...params
          },
        }
      );
    }
    return loaders;
})
最后完整的less-loader是这样的
     // add less-loader options
     {
       test: lessRegex,
       exclude: lessModuleRegex,
       use: getStyleLoaders({
         importLoaders: 2,
         sourceMap: isEnvProduction
           ? shouldUseSourceMap
           : isEnvDevelopment,
       },
       'less-loader',
       {
         lessOptions:{
           modifyVars: { '@primary-color': '#f9c700' },
           javascriptEnabled: true,
         }
       }
       ),
       sideEffects: true,
     },
     // Adds support for less Modules
     // using the extension .module.less
     {
       test: lessModuleRegex,
       use: getStyleLoaders({
         importLoaders: 2,
         sourceMap: isEnvProduction
           ? shouldUseSourceMap
           : isEnvDevelopment,
         modules: {
           getLocalIdent: getCSSModuleLocalIdent,
         }
       },
       'less-loader' )
     },
到此不出意外直接 yarn start 就可以看见效果了
antd 在webpack.config配置主题色的更多相关文章
- react+antd 使用脚手架动态修改主题色
		最近做了一个需求,后台管理系统添加一个可以动态修改ant-design主题色.查询了大多数的文章,发现基本都是抄来抄去,而且文章记录的也一点也不详细.刚刚把这个功能做完了,顺便记录一下如何去修改主题色 ... 
- 在webpack自定义配置antd的按需加载和修改主题色
		最近使用antd来做react项目的UI.从antd官网上,在使用create-react-app脚手架搭建项目时步骤如下: (1)添加模块 react-app-rewired, babel-plug ... 
- creat-react-app搭建的项目中按需引入antd以及配置Less和如何修改antd的主题色
		在creat-react-app搭建的项目环境中按需引入antd以及配置less,首先需要暴露出来webpack文件.(此操作不可逆). create-react-app myapp 创建同一个rea ... 
- antd 主题色
		如果是自己配置的reac项目,而非官方推荐的creat-react-app或者dva-cli等阿里自己开发的脚手架去引入antd,会有两个问题 第一,用babel-plugin-import设置sty ... 
- vite实现element-plus按需配置,自定义主题和读取/修改系统主题色
		项目地址 vite.config.ts 插件和vite配置 import { defineConfig } from "vite"; import vue from "@ ... 
- webpack.config.js文件的高级配置
		一.多个入口文件之前我们配置的都是 一个入口 var webpack = require('webpack'); var commonsPlugin = new webpack.optimize.Co ... 
- 配置webpack.config.js中的文件
		webpack.config.js文件中,主要包括 entry:入口文件 output:出口文件 module:模块 plugins:插件 这几部分 1.基本配置 运行 webpack 这一命令可以将 ... 
- webpack.config.js配置遇到Error: Cannot find module '@babel/core'&&Cannot find module '@babel/plugin-transform-react-jsx' 问题
		下文是网上找到的方法,是因为版本冲突的原因,参照后安装7版本解决 cnpm install -D babel-loader@ babel-core babel-preset-env 一. 问题描述 在 ... 
- antd在webpack里面的配置
		概述 antd是蚂蚁金服打造的一个react组件,真的非常棒,我看了下官方文档,感觉比bootstrap要好.唯一的缺点可能就是打包的时候要打包它的一些样式表,所以资源体积会很大,并且css可能会和自 ... 
- [转]webpack4.0.1安装问题和webpack.config.js的配置变化
		本文转自:https://blog.csdn.net/jiang7701037/article/details/79403637 The CLI moved into a separate packa ... 
随机推荐
- Android studio软件的安装过程详解
			步骤详解 进入官网,下载相关软件 官网地址:https://developer.android.google.cn/studio/ 点击该页面里面的这个按钮,就能够很轻松地完成下载操作: 弹出弹窗,继 ... 
- Web自动化——介绍与安装以及第一个web自动化程序(一)
			1. 为什么要做Web自动化测试 什么是web自动化测试 让程序代替人,去验证网页上功能的过程 web自动化测试与手工测试的比较 web自动化测试执行的测试用例是手工功能测试的子集 web自动化测试的 ... 
- Java多线程开发CompletableFuture的应用
			做Java编程,难免会遇到多线程的开发,但是JDK8这个CompletableFuture类很多开发者目前还没听说过,但是这个类实在是太好用了,了解它的一些用法后相信你会对它爱不释手(呸渣男,咋对谁 ... 
- MybatisPlus------代码生成器
			快速开发: 代码生成器: (1)模版:MyBatisPlus提供 (2)数据库相关配置:读取数据库获取信息 (3)开发者自定义配置:手工配置 package com.ithema; import co ... 
- MySQL 数据库死锁问题
			在分析案例之前,我们先了解一下MySQL INNODB.在MySQL INNODB引擎中主键是采用聚簇索引的形式,即在B树的叶子节点中既存储了索引值也存储了数据记录,即数据记录和主键索引是存在一起的. ... 
- SpringBoot 启动类的原理
			SpringBoot启动类上使用 @SpringBootApplication注解,该注解是一个组合注解,包含多个其它注解.和类定义(SpringApplication.run)要揭开 SpringB ... 
- API网关:开源Apinto网关快速入门
			Apinto网关基于GO语言模块化开发,5分钟极速部署,配置简单.易于维护,支持集群与动态扩容,开箱即用.Apinto除了提供丰富的网关插件外,还提供监控告警.用户角色等扩展应用,同时支持自定义网关插 ... 
- python协程详细解释以及例子
			目录 1.协程 1.1greenlet实现协程 1.2yield关键字实现协程 1.3使用asyncio模块实现协程 1.4async & await关键字实现协程 2.协程意义 3.异步编程 ... 
- golang pprof 监控系列(3) —— memory,block,mutex 统计原理
			golang pprof 监控系列(3) -- memory,block,mutex 统计原理 大家好,我是蓝胖子. 在上一篇文章 golang pprof监控系列(2) -- memory,bloc ... 
- R语言网络数据爬虫之三个问题
			现在大家对爬虫的兴趣不断高涨,R和PYTHON是两个非常有力的爬虫工具.Python倾向于做大型爬虫,与R相比,语法相对复杂,因此Python爬虫的学习曲线会相对陡峭.对于那些时间宝贵,又想从网上获取 ... 
