1
+ const url = require ( 'url' ) ;
2
+
1
3
const LastCallWebpackPlugin = require ( 'last-call-webpack-plugin' ) ;
2
4
3
5
class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
@@ -6,7 +8,7 @@ class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
6
8
assetProcessors : [
7
9
{
8
10
phase : LastCallWebpackPlugin . PHASES . OPTIMIZE_CHUNK_ASSETS ,
9
- regExp : ( options && options . assetNameRegExp ) || / \. c s s $ / g ,
11
+ regExp : ( options && options . assetNameRegExp ) || / \. c s s ( \? . * ) ? $ / i ,
10
12
processor : ( assetName , asset , assets ) =>
11
13
this . processCss ( assetName , asset , assets ) ,
12
14
}
@@ -15,7 +17,7 @@ class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
15
17
} ) ;
16
18
17
19
this . options . assetNameRegExp = ! options || ! options . assetNameRegExp ?
18
- / \. c s s $ / g :
20
+ / \. c s s ( \? . * ) ? $ / i :
19
21
options . assetNameRegExp ;
20
22
this . options . cssProcessor = ! options || ! options . cssProcessor ?
21
23
require ( 'cssnano' ) :
@@ -33,6 +35,12 @@ class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
33
35
}
34
36
35
37
processCss ( assetName , asset , assets ) {
38
+ const parse = url . parse ( assetName ) ;
39
+ const assetInfo = {
40
+ path : parse . pathname ,
41
+ query : parse . query ? `?${ parse . query } ` : '' ,
42
+ } ;
43
+
36
44
const css = asset . sourceAndMap ? asset . sourceAndMap ( ) : { source : asset . source ( ) } ;
37
45
const processOptions = Object . assign (
38
46
{ from : assetName , to : assetName } ,
@@ -43,7 +51,7 @@ class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
43
51
try {
44
52
let map = css . map ;
45
53
if ( ! map ) {
46
- const mapJson = assets . getAsset ( assetName + '. map' ) ;
54
+ const mapJson = assets . getAsset ( ` ${ assetInfo . path } . map` ) ;
47
55
if ( mapJson ) {
48
56
map = JSON . parse ( mapJson ) ;
49
57
}
@@ -65,7 +73,7 @@ class OptimizeCssAssetsWebpackPlugin extends LastCallWebpackPlugin {
65
73
. cssProcessor . process ( css . source , processOptions , this . options . cssProcessorPluginOptions )
66
74
. then ( r => {
67
75
if ( processOptions . map && r . map && r . map . toString ) {
68
- assets . setAsset ( assetName + '. map' , r . map . toString ( ) ) ;
76
+ assets . setAsset ( ` ${ assetInfo . path } . map${ assetInfo . query } ` , r . map . toString ( ) ) ;
69
77
}
70
78
return r . css ;
71
79
} ) ;
0 commit comments