-
Notifications
You must be signed in to change notification settings - Fork 7
/
config-overrides.js
115 lines (111 loc) · 2.84 KB
/
config-overrides.js
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
const {
override,
addWebpackAlias,
overrideDevServer,
fixBabelImports,
disableEsLint,
addWebpackPlugin,
setWebpackOptimizationSplitChunks,
} = require('customize-cra');
const path = require('path');
const webpack = require('webpack')
const ProgressBarPlugin = require("progress-bar-webpack-plugin");
const rewireReactHotLoader = require('react-app-rewire-hot-loader')
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')
const CompressionWebpackPlugin = require("compression-webpack-plugin");
const HardSourcePlugin = require('hard-source-webpack-plugin')
const fs = require('fs')
const isProd = process.env.NODE_ENV === 'production'
const needAnalyzer = process.env.REACT_APP_ANALYZER === 'true'
const appPath = target => path.resolve(__dirname, target);
const devServerConfig = () => config => {
return {
...config,
compress: true,
proxy: {
'/meeting-v2/**': {
target: '这个不能暴露',
changeOrigin: true,
pathRewrite: {
'^/meeting-v2': '/meeting-v2'
}
}
}
}
}
const rewireHotLoader = () => config => {
config = rewireReactHotLoader(config, config.mode)
return config
}
const addCompression = () => config => {
if (isProd) {
config.plugins.push(
// 开启gzip压缩
new CompressionWebpackPlugin({
test: /\.(css|js)$/,
threshold: 1024,
minRatio: 0.9
})
)
}
return config
}
const addAnalyzer = () => config => {
if (needAnalyzer) {
config.plugins.push(new BundleAnalyzerPlugin())
}
return config
}
const addSplitChunks = () => config => {
config.optimization.splitChunks = {//分割代码块
cacheGroups: {
vendor: {
//第三方依赖
priority: 1, //设置优先级,首先抽离第三方模块
name: 'vendor',
test: /node_modules/,
chunks: 'initial',
minSize: 0,
minChunks: 1 //最少引入了1次
},
//缓存组
common: {
//公共模块
chunks: 'initial',
name: 'common',
minSize: 100, //大小超过100个字节
minChunks: 3 //最少引入了3次
}
}
}
return config
}
module.exports = {
webpack: override(
rewireHotLoader(),
addWebpackAlias({
'@': appPath('src'),
'~': appPath('src/assets'),
'react-dom': '@hot-loader/react-dom'
}),
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: 'css',
}),
disableEsLint(),
addCompression(),
addAnalyzer(),
addSplitChunks(),
addWebpackPlugin(
new ProgressBarPlugin(),
new HardSourcePlugin()
)
),
devServer: overrideDevServer(
devServerConfig()
),
paths: (paths, env) => {
return paths;
}
};