扩展 create-react-app 项目中的 webpack 配置

Posted by YuHo Wang on 2019-08-12

create-react-app 生成的项目对 webpack 的配置进行了封装并默认隐藏,但大多数时候我们需要扩展项目的 webpack 配置。

此处以配置 less-loader 为例,演示如何扩展 create-react-appwebpack 配置,有以下两种方式:

一、使用react-app-rewired

安装

1
2
yarn add react-app-rewired customize-cra
yarn add less less-loader

修改package.json配置

1
2
3
4
5
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test"
}

添加扩展配置

在项目根目录创建文件config-override.js

1
2
3
4
5
6
7
const { override, addLessLoader } = require('customize-cra')

module.exports = override(
addLessLoader({
javascriptEnabled: true
})
)

二、yarn eject 显示隐藏的配置文件并修改

根目录下运行命令

1
yarn eject

此时隐藏的配置文件都显示出来了,./config/webpack.config.js 就是 webpack 的配置文件

安装 less 相关包

1
yarn add less less-loader

在配置文件中添加 less 规则

1
2
3
4
5
6
// style files regexes
const cssRegex = /\.css$/;
const cssModuleRegex = /\.module\.css$/;
const sassRegex = /\.(scss|sass)$/;
+ const lessRegx = /\.less$/;
+ const lessModuleRegex = /\.module\.less$/;

添加 loader 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
test: lessRegex,
exclude: lessModuleRegex,
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
},
'less-loader'
),
sideEffects: true,
},
{
test: lessModuleRegex,
exclude:[/node_modules/],
use: getStyleLoaders(
{
importLoaders: 2,
sourceMap: isEnvProduction && shouldUseSourceMap,
modules: true,
getLocalIdent: getCSSModuleLocalIdent,
},
'less-loader'
),
}