@@ -3,15 +3,19 @@ const isdev = require('isdev')
33const webpack = require ( 'webpack' )
44const autoprefixer = require ( 'autoprefixer' )
55
6- const CleanWebpackPlugin = require ( 'clean-webpack-plugin' )
6+ const CopyPlugin = require ( 'copy-webpack-plugin' )
7+ const CleanPlugin = require ( 'clean-webpack-plugin' )
78const StyleLintPlugin = require ( 'stylelint-webpack-plugin' )
8- const ExtractTextPlugin = require ( "extract-text-webpack-plugin" )
9- const BrowserSyncPlugin = require ( "browser-sync-webpack-plugin" )
9+ const ExtractTextPlugin = require ( 'extract-text-webpack-plugin' )
10+ const BrowserSyncPlugin = require ( 'browser-sync-webpack-plugin' )
11+ const { default : ImageminPlugin } = require ( 'imagemin-webpack-plugin' )
1012
1113const sassRule = require ( './rules/sass' )
1214const fontsRule = require ( './rules/fonts' )
1315const imagesRule = require ( './rules/images' )
1416const javascriptRule = require ( './rules/javascript' )
17+ const externalFontsRule = require ( './rules/external.fonts' )
18+ const externalImagesRule = require ( './rules/external.images' )
1519
1620const config = require ( './app.config' )
1721
@@ -34,16 +38,26 @@ module.exports = {
3438 module : {
3539 rules : [
3640 sassRule ,
37- javascriptRule ,
41+ fontsRule ,
3842 imagesRule ,
39- fontsRule
43+ javascriptRule ,
44+ externalFontsRule ,
45+ externalImagesRule ,
4046 ]
4147 } ,
4248
4349 plugins : [
4450 new webpack . LoaderOptionsPlugin ( { minimize : ! isdev } ) ,
45- new ExtractTextPlugin ( config . outputs . stylesheet ) ,
46- new CleanWebpackPlugin ( config . paths . public , { root : config . paths . root } ) ,
51+ new ExtractTextPlugin ( config . outputs . css ) ,
52+ new CleanPlugin ( config . paths . public , { root : config . paths . root } ) ,
53+ new CopyPlugin ( [ {
54+ from : {
55+ glob : `${ config . paths . images } /**/*` ,
56+ flatten : true ,
57+ dot : false
58+ } ,
59+ to : config . outputs . image . filename ,
60+ } ] ) ,
4761 ]
4862}
4963
@@ -69,4 +83,14 @@ if (! isdev) {
6983 sourceMap : isdev
7084 } )
7185 )
86+
87+ module . exports . plugins . push (
88+ new ImageminPlugin ( {
89+ test : / \. ( j p e ? g | p n g | g i f | s v g ) $ / i,
90+ optipng : { optimizationLevel : 7 } ,
91+ gifsicle : { optimizationLevel : 3 } ,
92+ pngquant : { quality : '65-90' , speed : 4 } ,
93+ svgo : { removeUnknownsAndDefaults : false , cleanupIDs : false }
94+ } )
95+ )
7296}
0 commit comments