【React】Antd4.x 优化 按需引用、自定义主题

2,150 阅读1分钟

引言

在antd4.x的文档中,只提及了如何进行自定义主题,在3.x的文档中提到了可以用react-app-rewired这个包修改react的默认配置的方式配合babel-plugin-import实现按需引用。但是在4.x的文档中,提到了可以用craco这个包来实现。

安装依赖

$ yarn add craco craco-less babel-plugin-import

因为antd是用less写的所以需要craco-less这个包来编译less文件

详细配置

修改启动脚本 package.json

"scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test"
}

创建文件 craco.config.js

/*
 * @Author: Mujey 🦦
 * @Date: 2021-08-12 14:44:33
 */
const CracoLessPlugin = require('craco-less')

module.exports = {
  plugins: [
    {
       // 使用CracoLessPlugin自定义主题颜色
      plugin: CracoLessPlugin,
      options: {
        lessLoaderOptions: {
          lessOptions: {
          // 自定义less变量
            modifyVars: {
              '@primary-color': '#282c34', // 蓝黑色
              '@success-color': '#5ecdc4', // 湖绿色
              '@warning-color': '#6d4cc2', // 紫色
              '@error-color': '#e64a19', // git桔色
            },
            javascriptEnabled: true, // 允许使用js修改less文件,必须为true,否则无法生效
          },
        },
      },
    },
  ],
  // 配置babel-plugin-import按需引用
  babel: {
    plugins: [
      [
        'import',
        {
          libraryName: 'antd',
          libraryDirectory: 'es',
          style: true,
        },
      ],
    ],
  },
}

修改 src/App.jsx 添加import './App.less'

import { Row, Col, PageHeader, Card, Avatar, Button, Radio } from 'antd'

import './App.less'

创建less文件 src/App.less

@import '~antd/dist/antd.less';

优化结果

image.png 可以看到antd的颜色已经发生了改变,我们再来看看加载的文件大小

优化前打包出的文件大小

image.png 这是完整引入ant.css时的打包后文件的大小1.4MB

优化后

image.png

文件大小直接小了一半! 784KB

你学废了吗🤪