html-webpack-plugin 4.0.0-alpha.1 → 4.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -301,8 +301,8 @@ about which values are passed.
301
301
  AsyncSeriesWaterfallHook<{
302
302
  assets: {
303
303
  publicPath: string,
304
- js: Array<{entryName: string, path: string}>,
305
- css: Array<{entryName: string, path: string}>,
304
+ js: Array<{string}>,
305
+ css: Array<{string}>,
306
306
  favicon?: string | undefined,
307
307
  manifest?: string | undefined
308
308
  },
package/index.js CHANGED
@@ -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}) => /\.hot-update\.js$/.test(entryName));
498
+ return assets.js.length && assets.js.every((assetPath) => /\.hot-update\.js$/.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 = /\.(css|js)(\?|$)/;
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;
package/lib/hooks.js CHANGED
@@ -20,8 +20,8 @@ const AsyncSeriesWaterfallHook = require('tapable').AsyncSeriesWaterfallHook;
20
20
  AsyncSeriesWaterfallHook<{
21
21
  assets: {
22
22
  publicPath: string,
23
- js: Array<{entryName: string, path: string}>,
24
- css: Array<{entryName: string, path: string}>,
23
+ js: Array<string>,
24
+ css: Array<string>,
25
25
  favicon?: string | undefined,
26
26
  manifest?: string | undefined
27
27
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "html-webpack-plugin",
3
- "version": "4.0.0-alpha.1",
3
+ "version": "4.0.0-alpha.2",
4
4
  "license": "MIT",
5
5
  "description": "Simplifies creation of HTML files to serve your webpack bundles",
6
6
  "author": "Charles Blaxland <charles.blaxland@gmail.com> (https://github.com/ampedandwired)",