@@ -327,8 +327,8 @@ class HtmlWebpackPlugin {
327
327
* @param {WebpackCompilation } compilation
328
328
* @param {{
329
329
publicPath: string,
330
- js: Array<{entryName: string, path: string} >,
331
- css: Array<{entryName: string, path: string} >,
330
+ js: Array<string>,
331
+ css: Array<string>,
332
332
manifest?: string,
333
333
favicon?: string
334
334
}} assets
@@ -357,8 +357,8 @@ class HtmlWebpackPlugin {
357
357
* @param {(templatePArameters) => string | Promise<string> } templateFunction
358
358
* @param {{
359
359
publicPath: string,
360
- js: Array<{entryName: string, path: string} >,
361
- css: Array<{entryName: string, path: string} >,
360
+ js: Array<string>,
361
+ css: Array<string>,
362
362
manifest?: string,
363
363
favicon?: string
364
364
}} assets
@@ -488,14 +488,14 @@ class HtmlWebpackPlugin {
488
488
*
489
489
* @param {{
490
490
publicPath: string,
491
- js: Array<{entryName: string, path: string} >,
492
- css: Array<{entryName: string, path: string} >,
491
+ js: Array<string>,
492
+ css: Array<string>,
493
493
manifest?: string,
494
494
favicon?: string
495
495
}} assets
496
496
*/
497
497
isHotUpdateCompilation ( assets ) {
498
- return assets . js . length && assets . js . every ( ( { entryName } ) => / \. h o t - u p d a t e \. j s $ / . test ( entryName ) ) ;
498
+ return assets . js . length && assets . js . every ( ( assetPath ) => / \. h o t - u p d a t e \. j s $ / . test ( assetPath ) ) ;
499
499
}
500
500
501
501
/**
@@ -505,8 +505,8 @@ class HtmlWebpackPlugin {
505
505
* @param {string[] } entryNames
506
506
* @returns {{
507
507
publicPath: string,
508
- js: Array<{entryName: string, path: string} >,
509
- css: Array<{entryName: string, path: string} >,
508
+ js: Array<string>,
509
+ css: Array<string>,
510
510
manifest?: string,
511
511
favicon?: string
512
512
}}
@@ -533,8 +533,8 @@ class HtmlWebpackPlugin {
533
533
/**
534
534
* @type {{
535
535
publicPath: string,
536
- js: Array<{entryName: string, path: string} >,
537
- css: Array<{entryName: string, path: string} >,
536
+ js: Array<string>,
537
+ css: Array<string>,
538
538
manifest?: string,
539
539
favicon?: string
540
540
}}
@@ -558,6 +558,7 @@ class HtmlWebpackPlugin {
558
558
}
559
559
560
560
// Extract paths to .js and .css files from the current compilation
561
+ const entryPointPublicPathMap = { } ;
561
562
const extensionRegexp = / \. ( c s s | j s ) ( \? | $ ) / ;
562
563
for ( let i = 0 ; i < entryNames . length ; i ++ ) {
563
564
const entryName = entryNames [ i ] ;
@@ -573,18 +574,21 @@ class HtmlWebpackPlugin {
573
574
: entryPointPublicPath ;
574
575
} ) ;
575
576
576
- entryPointPublicPaths . forEach ( ( entryPointPublicPaths ) => {
577
- const extMatch = extensionRegexp . exec ( entryPointPublicPaths ) ;
577
+ entryPointPublicPaths . forEach ( ( entryPointPublicPath ) => {
578
+ const extMatch = extensionRegexp . exec ( entryPointPublicPath ) ;
578
579
// Skip if the public path is not a .css or .js file
579
580
if ( ! extMatch ) {
580
581
return ;
581
582
}
583
+ // Skip if this file is already known
584
+ // (e.g. because of common chunk optimizations)
585
+ if ( entryPointPublicPathMap [ entryPointPublicPath ] ) {
586
+ return ;
587
+ }
588
+ entryPointPublicPathMap [ entryPointPublicPath ] = true ;
582
589
// ext will contain .js or .css
583
590
const ext = extMatch [ 1 ] ;
584
- assets [ ext ] . push ( {
585
- entryName : entryName ,
586
- path : entryPointPublicPaths
587
- } ) ;
591
+ assets [ ext ] . push ( entryPointPublicPath ) ;
588
592
} ) ;
589
593
}
590
594
return assets ;
@@ -650,32 +654,30 @@ class HtmlWebpackPlugin {
650
654
651
655
/**
652
656
* Generate all tags script for the given file paths
653
- * @param {Array<{ entryName: string; path: string; } > } jsAssets
657
+ * @param {Array<string> } jsAssets
654
658
* @returns {Array<HtmlTagObject> }
655
659
*/
656
660
generatedScriptTags ( jsAssets ) {
657
661
return jsAssets . map ( scriptAsset => ( {
658
662
tagName : 'script' ,
659
663
voidTag : false ,
660
- entry : scriptAsset . entryName ,
661
664
attributes : {
662
- src : scriptAsset . path
665
+ src : scriptAsset
663
666
}
664
667
} ) ) ;
665
668
}
666
669
667
670
/**
668
671
* Generate all style tags for the given file paths
669
- * @param {Array<{ entryName: string; path: string; } > } cssAssets
672
+ * @param {Array<string> } cssAssets
670
673
* @returns {Array<HtmlTagObject> }
671
674
*/
672
675
generateStyleTags ( cssAssets ) {
673
676
return cssAssets . map ( styleAsset => ( {
674
677
tagName : 'link' ,
675
678
voidTag : true ,
676
- entry : styleAsset . entryName ,
677
679
attributes : {
678
- href : styleAsset . path ,
680
+ href : styleAsset ,
679
681
rel : 'stylesheet'
680
682
}
681
683
} ) ) ;
@@ -879,8 +881,8 @@ class HtmlWebpackPlugin {
879
881
* @param {WebpackCompilation } compilation
880
882
* @param {{
881
883
publicPath: string,
882
- js: Array<{entryName: string, path: string} >,
883
- css: Array<{entryName: string, path: string} >,
884
+ js: Array<string>,
885
+ css: Array<string>,
884
886
manifest?: string,
885
887
favicon?: string
886
888
}} assets
@@ -892,6 +894,13 @@ class HtmlWebpackPlugin {
892
894
* @returns {HtmlWebpackPluginTemplateParameter }
893
895
*/
894
896
function templateParametersGenerator ( compilation , assets , assetTags , options ) {
897
+ const xhtml = options . xhtml ;
898
+ assetTags . headTags . toString = function ( ) {
899
+ return this . map ( ( assetTagObject ) => htmlTagObjectToString ( assetTagObject , xhtml ) ) . join ( '' ) ;
900
+ } ;
901
+ assetTags . bodyTags . toString = function ( ) {
902
+ return this . map ( ( assetTagObject ) => htmlTagObjectToString ( assetTagObject , xhtml ) ) . join ( '' ) ;
903
+ } ;
895
904
return {
896
905
compilation : compilation ,
897
906
webpackConfig : compilation . options ,
@@ -912,7 +921,7 @@ HtmlWebpackPlugin.version = 4;
912
921
/**
913
922
* A static helper to get the hooks for this plugin
914
923
*
915
- * Usage: HtmlWebpackPlugin.getHook (compilation, 'HookName').tap ('YourPluginName', () => { ... });
924
+ * Usage: HtmlWebpackPlugin.getHooks (compilation).HOOK_NAME.tapAsync ('YourPluginName', () => { ... });
916
925
*/
917
926
HtmlWebpackPlugin . getHooks = getHtmlWebpackPluginHooks ;
918
927
HtmlWebpackPlugin . createHtmlTagObject = createHtmlTagObject ;
0 commit comments