全局引用样式
当js引入ant-design的Button
组件时,组件文件只会引用Button
相关的,但样式文件会加载全部组件的
1 | import React, { Component } from 'react'; |
在APP.js
中,要引入所有样式文件才会生效:1
@import '~antd/dist/antd.css';
这样的话组件样式是会生效,但是明显很多组件样式没用到,这就无形中增大了文件体积,所以需要按需加载,只加载那些引用了的样式文件。
使用 babel-plugin-import 实现按需加载
引入babel-plugin-import
1
yarn add babel-plugin-import -D
然后修改pachage.json
中的babel
对象或者添加.babelrc
配置文件,修改过后:1
2
3
4
5
6
7
8
9
10
11
12
13
14"babel": {
"presets": [
"react-app"
],
"plugins": [
[
"import",
{
"libraryName": "antd",
"style": "css"
}
]
]
},
这样就可以像下面这样在组件中愉快地按需加载ant的组件文件和样式了1
import { Button } from 'antd'
这里需要特别说明的配置项是style
,默认为css
,即加载时ant组件编译过后的css文件,如果为true
,则是加载组件的less
文件,如果我们需要修改antd一些主题样式的全局变量,就可以设为true`。
引入less-loader修改主题样式
首先得引入
less
和less-loader
,因为ant
的的样式是用less
写的1
yarn add less less-loader -D
将上面
plugins
中的style
设为true
- 在
webpack.config.js
中加入less-loader配置,找到module对象,添加代码:
1 | //antd less 文件编译 |
配置项中modifyVars
中的就是要修改的less
全局变量信息,想看更多查询官方文档
关于引入less-loader
之后编译时报Unrecognised input
的问题
这个我查询了一些资料,发现大家的报错原因和我的不太一样,最后和同事讨论之后定位问题是因为less-loader
引入位置问题,汗!
由于create-react-app
v3是集成的webpack
4.x,很多配置项都集成到了一起,而不是像之前版本那样会暴露一个webpack.config.dev.js
和webpack.config.prod.js
了。在新的脚手架中我们只要修改webpack.config.js
中的loader配置。并且一定要在oneOF数组中添加上面的配置:(我之所以编译报Unrecognised input
问题就是直接在rules
中添加less-loader
配置结果匹配到了file-loader
导致的)