1
1
const path = require ( 'path' ) ;
2
+ const HtmlWebpackPlugin = require ( 'html-webpack-plugin' ) ;
2
3
const createSri = require ( 'sri-create' ) ;
3
4
4
5
const empty = '' ;
@@ -50,7 +51,7 @@ class WebpackCdnPlugin {
50
51
const getArgs = [ this . url , this . prefix , this . prod , output . publicPath ] ;
51
52
52
53
compiler . hooks . compilation . tap ( 'WebpackCdnPlugin' , ( compilation ) => {
53
- compilation . hooks . htmlWebpackPluginBeforeHtmlGeneration . tapAsync (
54
+ WebpackCdnPlugin . _getHtmlHook ( compilation , 'beforeAssetTagGeneration' , ' htmlWebpackPluginBeforeHtmlGeneration' ) . tapAsync (
54
55
'WebpackCdnPlugin' ,
55
56
( data , callback ) => {
56
57
const moduleId = data . plugin . options . cdnModule ;
@@ -66,6 +67,12 @@ class WebpackCdnPlugin {
66
67
67
68
modules = modules . filter ( ( module ) => module . version ) ;
68
69
70
+ if ( output . publicPath === empty ) {
71
+ data . assets . js . forEach ( ( item , i ) => {
72
+ data . assets . js [ i ] = data . assets . js [ i ] . replace ( data . assets . publicPath , empty ) ;
73
+ } ) ;
74
+ }
75
+
69
76
data . assets . js = WebpackCdnPlugin . _getJs ( modules , ...getArgs ) . concat ( data . assets . js ) ;
70
77
data . assets . css = WebpackCdnPlugin . _getCss ( modules , ...getArgs ) . concat (
71
78
data . assets . css ,
@@ -93,7 +100,7 @@ class WebpackCdnPlugin {
93
100
compiler . hooks . afterPlugins . tap ( 'WebpackCdnPlugin' , ( ) => {
94
101
compiler . hooks . thisCompilation . tap ( 'WebpackCdnPlugin' , ( ) => {
95
102
compiler . hooks . compilation . tap ( 'HtmlWebpackPluginHooks' , ( compilation ) => {
96
- compilation . hooks . htmlWebpackPluginAlterAssetTags . tapPromise (
103
+ WebpackCdnPlugin . _getHtmlHook ( compilation , 'alterAssetTags' , ' htmlWebpackPluginAlterAssetTags' ) . tapPromise (
97
104
'WebpackCdnPlugin' ,
98
105
this . alterAssetTags . bind ( this ) ,
99
106
) ;
@@ -138,8 +145,16 @@ class WebpackCdnPlugin {
138
145
}
139
146
}
140
147
} ;
141
- await Promise . all ( pluginArgs . head . filter ( filterTag ) . map ( processTag ) ) ;
142
- await Promise . all ( pluginArgs . body . filter ( filterTag ) . map ( processTag ) ) ;
148
+
149
+ /* istanbul ignore if */
150
+ /* istanbul ignore else */
151
+ if ( pluginArgs . assetTags ) {
152
+ await Promise . all ( pluginArgs . assetTags . scripts . filter ( filterTag ) . map ( processTag ) ) ;
153
+ await Promise . all ( pluginArgs . assetTags . styles . filter ( filterTag ) . map ( processTag ) ) ;
154
+ } else {
155
+ await Promise . all ( pluginArgs . head . filter ( filterTag ) . map ( processTag ) ) ;
156
+ await Promise . all ( pluginArgs . body . filter ( filterTag ) . map ( processTag ) ) ;
157
+ }
143
158
}
144
159
145
160
/**
@@ -265,6 +280,16 @@ class WebpackCdnPlugin {
265
280
266
281
return files ;
267
282
}
283
+
284
+ static _getHtmlHook ( compilation , v4Name , v3Name ) {
285
+ try {
286
+ /* istanbul ignore next */
287
+ return HtmlWebpackPlugin . getHooks ( compilation ) [ v4Name ] || compilation . hooks [ v3Name ] ;
288
+ } catch ( e ) {
289
+ /* istanbul ignore next */
290
+ return compilation . hooks [ v3Name ] ;
291
+ }
292
+ }
268
293
}
269
294
270
295
module . exports = WebpackCdnPlugin ;
0 commit comments