1
1
const cssnano = require ( 'cssnano' ) ;
2
+ const postcss = require ( 'postcss' ) ;
2
3
3
4
/**
4
5
* Optimize cssnano plugin
@@ -10,14 +11,13 @@ function OptimizeCssnanoPlugin(options) {
10
11
sourceMap : false ,
11
12
cssnanoOptions : {
12
13
preset : 'default' ,
13
- map : false ,
14
14
} ,
15
15
} , options ) ;
16
16
17
17
if ( this . options . sourceMap ) {
18
- this . options . cssnanoOptions . map = Object . assign (
18
+ this . options . sourceMap = Object . assign (
19
19
{ inline : false } ,
20
- this . options . cssnanoOptions . map || { } ) ;
20
+ this . options . sourceMap || { } ) ;
21
21
}
22
22
}
23
23
@@ -41,27 +41,36 @@ OptimizeCssnanoPlugin.prototype.apply = function(compiler) {
41
41
const originalCss = asset . source ( ) ;
42
42
43
43
// Options for particalar cssnano call
44
- const options = JSON . parse ( JSON . stringify ( self . options . cssnanoOptions ) ) ;
45
- options . to = assetName ;
44
+ const postCssOptions = {
45
+ from : assetName ,
46
+ to : assetName ,
47
+ map : false ,
48
+ } ;
49
+ const cssnanoOptions = self . options . cssnanoOptions ;
46
50
47
51
// Extract or remove previous map
48
52
const mapName = assetName + '.map' ;
49
- if ( options . map ) {
53
+ if ( self . options . sourceMap ) {
50
54
// Use previous map if exist...
51
55
if ( compilation . assets [ mapName ] ) {
52
56
const mapObject = JSON . parse ( compilation . assets [ mapName ] . source ( ) ) ;
53
57
54
58
// ... and not empty
55
59
if ( mapObject . sources . length > 0 || mapObject . mappings . length > 0 ) {
56
- options . map . prev = compilation . assets [ mapName ] . source ( ) ;
60
+ postCssOptions . map = Object . assign ( {
61
+ prev : compilation . assets [ mapName ] . source ( ) ,
62
+ } , self . options . sourceMap ) ;
63
+ } else {
64
+ postCssOptions . map = Object . assign ( { } , self . options . sourceMap ) ;
57
65
}
58
66
}
59
67
} else {
60
68
delete compilation . assets [ mapName ] ;
61
69
}
62
70
63
71
// Run minification
64
- const promise = cssnano . process ( originalCss , options )
72
+ const promise = postcss ( [ cssnano ( cssnanoOptions ) ] )
73
+ . process ( originalCss , postCssOptions )
65
74
. then ( ( result ) => {
66
75
if ( hasErrors ) {
67
76
return ;
0 commit comments