@@ -3,7 +3,10 @@ const _ = require('lodash');
3
3
const CompressionPlugin = require ( 'compression-webpack-plugin' ) ;
4
4
const HtmlWebpackPlugin = require ( 'html-webpack-plugin' ) ;
5
5
const HtmlWebpackHarddiskPlugin = require ( 'html-webpack-harddisk-plugin' ) ;
6
+ const MiniCssExtractPlugin = require ( 'mini-css-extract-plugin' ) ;
7
+ const OptimizeCssAssetsPlugin = require ( 'optimize-css-assets-webpack-plugin' ) ;
6
8
const path = require ( 'path' ) ;
9
+ const UglifyJsPlugin = require ( 'uglifyjs-webpack-plugin' ) ;
7
10
const webpack = require ( 'webpack' ) ;
8
11
9
12
module . exports = function makeWebpackConfig ( options ) {
@@ -193,7 +196,11 @@ module.exports = function makeWebpackConfig(options) {
193
196
// Reference: https://github.com/postcss/postcss-loader
194
197
// Postprocess your css with PostCSS plugins
195
198
test : / \.css$ / ,
196
- use : [ 'style-loader' , 'css-loader' , 'postcss-loader' ] ,
199
+ use : [
200
+ DEV ? 'style-loader' : MiniCssExtractPlugin . loader ,
201
+ 'css-loader' ,
202
+ 'postcss-loader' ,
203
+ ] ,
197
204
include : [
198
205
path . resolve ( __dirname , 'node_modules/bootstrap/dist/css/*.css' ) ,
199
206
path . resolve ( __dirname , 'client/app/app.css' )
@@ -202,7 +209,11 @@ module.exports = function makeWebpackConfig(options) {
202
209
// CSS LOADER
203
210
// Reference: https://github.com/webpack/css-loader
204
211
test : / \. c s s $ / ,
205
- use : [ 'to-string-loader' , 'css-loader?sourceMap' , 'postcss-loader' ] ,
212
+ use : [
213
+ 'to-string-loader' ,
214
+ 'css-loader?sourceMap' ,
215
+ 'postcss-loader' ,
216
+ ] ,
206
217
include : [
207
218
path . resolve ( __dirname , 'client' )
208
219
] ,
@@ -211,7 +222,12 @@ module.exports = function makeWebpackConfig(options) {
211
222
// SASS LOADER
212
223
// Reference: https://github.com/jtangelder/sass-loader
213
224
test : / \. ( s c s s | s a s s ) $ / ,
214
- use : [ 'style-loader' , 'css-loader?sourceMap' , 'sass-loader' ] ,
225
+ use : [
226
+ DEV ? 'style-loader' : MiniCssExtractPlugin . loader ,
227
+ 'css-loader?sourceMap' ,
228
+ 'postcss-loader' ,
229
+ 'sass-loader' ,
230
+ ] ,
215
231
include : [
216
232
path . resolve ( __dirname , 'node_modules/bootstrap-sass/assets/stylesheets/*.scss' ) ,
217
233
path . resolve ( __dirname , 'client/app/app.scss' )
@@ -220,39 +236,64 @@ module.exports = function makeWebpackConfig(options) {
220
236
// SASS LOADER
221
237
// Reference: https://github.com/jtangelder/sass-loader
222
238
test : / \. ( s c s s | s a s s ) $ / ,
223
- use : [ 'to-string-loader?sourceMap' , 'css-loader?sourceMap' , 'sass-loader?sourceMap' ] ,
239
+ use : [
240
+ 'to-string-loader?sourceMap' ,
241
+ 'css-loader?sourceMap' ,
242
+ 'postcss-loader' ,
243
+ 'sass-loader?sourceMap' ,
244
+ ] ,
224
245
include : [
225
246
path . resolve ( __dirname , 'client' )
226
247
] ,
227
248
exclude : [ / a p p \. s c s s $ / ]
228
249
} < % } else if ( filters . less ) { % > , {
229
250
// LESS LOADER
230
251
test : / \. l e s s $ / ,
231
- use : [ 'style-loader' , 'css-loader?sourceMap' , 'less-loader' ] ,
252
+ use : [
253
+ DEV ? 'style-loader' : MiniCssExtractPlugin . loader ,
254
+ 'css-loader?sourceMap' ,
255
+ 'postcss-loader' ,
256
+ 'less-loader' ,
257
+ ] ,
232
258
include : [
233
259
path . resolve ( __dirname , 'node_modules/bootstrap/less/*.less' ) ,
234
260
path . resolve ( __dirname , 'client/app/app.less' )
235
261
]
236
262
} , {
237
263
// LESS LOADER
238
264
test : / \. l e s s $ / ,
239
- use : [ 'to-string-loader?sourceMap' , 'css-loader?sourceMap' , 'less-loader' ] ,
265
+ use : [
266
+ 'to-string-loader?sourceMap' ,
267
+ 'css-loader?sourceMap' ,
268
+ 'postcss-loader' ,
269
+ 'less-loader' ,
270
+ ] ,
240
271
include : [
241
272
path . resolve ( __dirname , 'client' )
242
- ] ,
273
+ ] ,
243
274
exclude : [ / a p p \. l e s s $ / ]
244
275
} < % } else if ( filters . stylus ) { % > , {
245
276
// Stylus LOADER
246
277
test : / \. s t y l $ / ,
247
- use : [ 'style-loader' , 'css-loader?sourceMap' , 'stylus-loader' ] ,
278
+ use : [
279
+ DEV ? 'style-loader' : MiniCssExtractPlugin . loader ,
280
+ 'css-loader?sourceMap' ,
281
+ 'postcss-loader' ,
282
+ 'stylus-loader' ,
283
+ ] ,
248
284
include : [
249
285
path . resolve ( __dirname , 'node_modules/bootstrap-styl/bootstrap/*.styl' ) ,
250
286
path . resolve ( __dirname , 'client/app/app.styl' )
251
287
]
252
288
} , {
253
289
// Stylus LOADER
254
290
test : / \. s t y l $ / ,
255
- use : [ 'to-string-loader?sourceMap' , 'css-loader?sourceMap' , 'stylus-loader' ] ,
291
+ use : [
292
+ 'to-string-loader?sourceMap' ,
293
+ 'css-loader?sourceMap' ,
294
+ 'postcss-loader' ,
295
+ 'stylus-loader' ,
296
+ ] ,
256
297
include : [
257
298
path . resolve ( __dirname , 'client' )
258
299
] ,
@@ -275,14 +316,6 @@ module.exports = function makeWebpackConfig(options) {
275
316
path . resolve ( __dirname , '../src' )
276
317
) ,
277
318
278
- // Reference: https://github.com/webpack/extract-text-webpack-plugin
279
- // Extract css files
280
- // Disabled when in test mode or not in build mode
281
- new ExtractTextPlugin ( {
282
- filename : '[name].[hash].css' ,
283
- disable : ! BUILD || TEST ,
284
- } ) ,
285
-
286
319
new webpack . LoaderOptionsPlugin ( {
287
320
options : {
288
321
context : __dirname
@@ -364,6 +397,29 @@ module.exports = function makeWebpackConfig(options) {
364
397
365
398
config . cache = DEV ;
366
399
400
+ if ( BUILD ) {
401
+ config . optimization = {
402
+ splitChunks : {
403
+ cacheGroups : {
404
+ styles : {
405
+ name : 'styles' ,
406
+ test : / \. c s s $ / ,
407
+ chunks : 'all' ,
408
+ enforce : true
409
+ } ,
410
+ } ,
411
+ } ,
412
+ minimizer : [
413
+ new UglifyJsPlugin ( {
414
+ cache : true ,
415
+ parallel : true ,
416
+ sourceMap : true // set to true if you want JS source maps
417
+ } ) ,
418
+ new OptimizeCssAssetsPlugin ( { } ) ,
419
+ ] ,
420
+ } ;
421
+ }
422
+
367
423
if ( TEST ) {
368
424
config . stats = {
369
425
colors : true ,
0 commit comments