一、实现原理
使用一些外部依赖,在webpack打包前先把antd所有的样式抽离出来到一个独立的css样式表,然后在
html
模板的<body>
顶层中手动引用这个样式来达到样式覆盖的。
二、前期准备
(一) 安装相关依赖
npm i less less-loader antd-theme-generator
(二) 配置less-loader以启用变量修改功能
在webpack.config.js
中(注意,如果是使用create-react-app创建的项目,需要运行npm run eject
暴露配置才会有这个webpack配置文件):
//先在顶部定义好less文件类型解析的正则
const lessRegex = /\.less$/;
const lessModuleRegex = /\.module\.less$/;
找到file-loader
的配置,在它前面加上:
// 增加对xx.less文件解析
{
test: lessRegex,
exclude: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
},
'less-loader',
{
javascriptEnabled:true
}
),
sideEffects: true,
},
// 增加对modules内关于import'/xx.less'文件的识别
{
test: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules:{
getLocalIdent: getCSSModuleLocalIdent,
},
},
'less-loader',
{
javascriptEnabled:true
}
)
},
另外,对于create-react-app
版本比较高的同学,或许需要在webpack.config.js
中的getStyleLoaders
中做些许修改来适配less-loader
的option
设置:
const getStyleLoaders = (cssOptions, preProcessor,more={
}) => {
const loaders = [
isEnvDevelopment && require.resolve('style-loader'),
isEnvProduction && {
loader: MiniCssExtractPlugin.loader,
options: paths.publicUrlOrPath.startsWith('.')
? {
publicPath: