3
3
const path = require ( "path" ) ;
4
4
const webpack = require ( "webpack" ) ; // webpack核心
5
5
const MiniCssExtractPlugin = require ( "mini-css-extract-plugin" ) ; // 为了单独打包css
6
+ const CssMinimizerPlugin = require ( "css-minimizer-webpack-plugin" ) ; // 对CSS进行压缩
6
7
const HtmlWebpackPlugin = require ( "html-webpack-plugin" ) ; // 生成html
7
8
const AntdDayjsWebpackPlugin = require ( "antd-dayjs-webpack-plugin" ) ;
8
9
const { CleanWebpackPlugin } = require ( "clean-webpack-plugin" ) ; // 每次打包前清除旧的build文件夹
10
+ const WorkboxPlugin = require ( "workbox-webpack-plugin" ) ; // 用于生成PWA servers-worker.js
9
11
const CopyPlugin = require ( "copy-webpack-plugin" ) ; // 用于直接复制public中的文件到打包的最终文件夹中
10
- const SWPrecacheWebpackPlugin = require ( "sw-precache-webpack-plugin" ) ; // 生成一个server-worker用于缓存
11
12
const FaviconsWebpackPlugin = require ( "favicons-webpack-plugin" ) ; // 自动生成各尺寸的favicon图标
12
13
const TerserPlugin = require ( "terser-webpack-plugin" ) ; // 优化js
13
- const OptimizeCSSAssetsPlugin = require ( "optimize-css-assets-webpack-plugin" ) ; // 压缩CSS
14
14
const webpackbar = require ( "webpackbar" ) ; // 进度条
15
15
/**
16
16
* 基础路径
@@ -30,10 +30,11 @@ module.exports = {
30
30
chunkFilename : "dist/[name].[chunkhash:8].chunk.js" ,
31
31
} ,
32
32
stats : {
33
- warningsFilter : warning => / C o n f l i c t i n g o r d e r / gm. test ( warning ) , // 不输出一些警告,多为因CSS引入顺序不同导致的警告
33
+ // warningsFilter: warning => /Conflicting order/gm.test(warning), // 不输出一些警告,多为因CSS引入顺序不同导致的警告
34
34
children : false , // 不输出子模块的打包信息
35
35
} ,
36
36
optimization : {
37
+ minimize : true ,
37
38
minimizer : [
38
39
new TerserPlugin ( {
39
40
parallel : true , // 多线程并行构建
@@ -47,7 +48,7 @@ module.exports = {
47
48
} ,
48
49
} ,
49
50
} ) ,
50
- new OptimizeCSSAssetsPlugin ( { } ) ,
51
+ new CssMinimizerPlugin ( ) ,
51
52
] ,
52
53
splitChunks : {
53
54
chunks : "all" ,
@@ -69,7 +70,7 @@ module.exports = {
69
70
{
70
71
// .less 解析
71
72
test : / \. l e s s $ / ,
72
- use : [ MiniCssExtractPlugin . loader , "css-loader" , "postcss-loader" , { loader : "less-loader" , options : { lessOptions :{ javascriptEnabled : true } } } ] ,
73
+ use : [ MiniCssExtractPlugin . loader , "css-loader" , "postcss-loader" , { loader : "less-loader" , options : { lessOptions :{ javascriptEnabled : true } } } ] ,
73
74
} ,
74
75
{
75
76
// 文件解析
@@ -134,26 +135,7 @@ module.exports = {
134
135
* **/
135
136
new MiniCssExtractPlugin ( {
136
137
filename : "dist/[name].[chunkhash:8].css" , // 生成的文件名
137
- } ) ,
138
- /**
139
- * 生成一个server-work用于缓存资源(PWA)
140
- * */
141
- new SWPrecacheWebpackPlugin ( {
142
- dontCacheBustUrlsMatching : / \. \w { 8 } \. / ,
143
- filename : "service-worker.js" ,
144
- logger ( message ) {
145
- if ( message . indexOf ( "Total precache size is" ) === 0 ) {
146
- return ;
147
- }
148
- if ( message . indexOf ( "Skipping static resource" ) === 0 ) {
149
- return ;
150
- }
151
- console . log ( message ) ;
152
- } ,
153
- minify : true , // 压缩
154
- navigateFallback : PUBLIC_PATH , // 遇到不存在的URL时,跳转到主页
155
- navigateFallbackWhitelist : [ / ^ (? ! \/ _ _ ) .* / ] , // 忽略从/__开始的网址,参考 https://github.com/facebookincubator/create-react-app/issues/2237#issuecomment-302693219
156
- staticFileGlobsIgnorePatterns : [ / \. m a p $ / , / a s s e t - m a n i f e s t \. j s o n $ / , / \. c a c h e $ / ] , // 不缓存sourcemaps,它们太大了
138
+ ignoreOrder : true , // 忽略因CSS文件引入顺序不一致而抛出的警告信息,多为antd内部css引起
157
139
} ) ,
158
140
// 拷贝public中的文件到最终打包文件夹里
159
141
new CopyPlugin ( {
@@ -176,6 +158,14 @@ module.exports = {
176
158
template : "./public/index.html" , // html模板路径
177
159
hash : false , // 防止缓存,在引入的文件后面加hash (PWA就是要缓存,这里设置为false)
178
160
inject : true , // 是否将js放在body的末尾
161
+ // 正式环境,把注册service-worker的代码加入到index.html中
162
+ registerServiceWorker : `<script>
163
+ if ("serviceWorker" in navigator) {
164
+ window.addEventListener("load", () => {
165
+ navigator.serviceWorker.register("./service-worker.js");
166
+ });
167
+ }
168
+ </script>` ,
179
169
} ) ,
180
170
/**
181
171
* 自动生成各种类型的favicon图标
@@ -211,6 +201,13 @@ module.exports = {
211
201
} ,
212
202
} ,
213
203
} ) ,
204
+ /**
205
+ * PWA - 自动生成server-worker.js
206
+ * https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-webpack-plugin.GenerateSW?hl=en
207
+ * */
208
+ new WorkboxPlugin . GenerateSW ( {
209
+ skipWaiting : true ,
210
+ } ) ,
214
211
] ,
215
212
resolve : {
216
213
extensions : [ ".js" , ".jsx" , ".less" , ".css" , ".wasm" ] , // 后缀名自动补全
0 commit comments