create-react-app配置Antd自定义主题/按需导入

官方定制主题方案

Ant Design 的样式变量

antd 的样式使用了 Less 作为开发语言,并定义了一系列全局/组件的样式变量,你可以根据需求进行相应调整。以下是一些最常用的通用变量,所有样式变量可以在 这里 找到。

@primary-color: #1890ff; // 全局主色
@link-color: #1890ff; // 链接色
@success-color: #52c41a; // 成功色
@warning-color: #faad14; // 警告色
@error-color: #f5222d; // 错误色
@font-size-base: 14px; // 主字号
@heading-color: rgba(0, 0, 0, 0.85); // 标题色
@text-color: rgba(0, 0, 0, 0.65); // 主文本色
@text-color-secondary : rgba(0, 0, 0, .45); // 次文本色
@disabled-color : rgba(0, 0, 0, .25); // 失效色
@border-radius-base: 4px; // 组件/浮层圆角
@border-color-base: #d9d9d9; // 边框色
@box-shadow-base: 0 2px 8px rgba(0, 0, 0, 0.15); // 浮层阴影

自定义主题

按照 配置主题 的要求,自定义主题需要用到 less 变量覆盖功能。

我们可以使用craco(一个对create-react-app进行自定义配置的社区解决方案)。

1、安装craco。

npm i @craco/craco -D

修改 package.json 里的 scripts 属性。

"scripts": {
-   "start": "react-scripts start",
-   "build": "react-scripts build",
-   "test": "react-scripts test",
+   "start": "craco start",
+   "build": "craco build",
+   "test": "craco test",
}

2、安装craco-less

npm i craco-less -D //less处理插件

然后在项目根目录创建一个 craco.config.js 用于修改默认配置。
 

const CracoLessPlugin = require('craco-less');

module.exports = {
    plugins: [
        {
            plugin: CracoLessPlugin,
            options: {
                lessLoaderOptions: {
                    lessOptions: {
                        modifyVars: {
                            '@primary-color': 'red', // 全局主色
                        },
                        javascriptEnabled: true,
                    },
                }
            },
        },
    ],
};

 注意还要在文件index.js 顶部引入 antd.css样式

import 'antd/dist/antd.css';

按需导入

使用 babel-plugin-import

注意:antd 默认支持基于 ES module 的 tree shaking,js 代码部分不使用这个插件也会有按需加载的效果。

babel-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件(原理),现在我们尝试安装它并修改 craco.config.js 文件。

npm i babel-plugin-import -D //自动导入antd的css样式

2.2 配置

  1. 在根目录创建craco.config.js文件

const CracoLessPlugin = require('craco-less');

module.exports = {
    babel: {//支持装饰器
        plugins: [
            [
                "import",
                {
                    "libraryName": "antd",
                    "libraryDirectory": "es",
                    "style": true //设置为true即是less 用css写'css'
                }
            ]
        ]
    },

    plugins: [
        {
            plugin: CracoLessPlugin,
            options: {
                lessLoaderOptions: {
                    lessOptions: {
                        modifyVars: {
                            '@primary-color': 'red', // 全局主色
                        },
                        javascriptEnabled: true,
                    },
                }
            },
        },
    ],
};

 使用

import React from 'react'
import { Button } from 'antd';
//import 'antd/dist/antd.css';
export default function App() {

  return (
    <div>
      <Button type="primary">按钮1</Button>
      <Button type="link">按钮2</Button>
      <Button type="success">按钮3</Button>
    </div>
  )
}

posted @ 2022-10-07 21:59  卟怪  阅读(162)  评论(0编辑  收藏  举报