Skip to content

No documented replacement / upgrade path for htmlWebpackPluginAlterChunks removed in 4.0.0 #1750

@OliverJEvans

Description

@OliverJEvans

Current behaviour 💣

In v4.0.0. removed a hook called htmlWebpackPluginAlterChunks but without any reasoning or documented replacement (342867e).

I've picked up an old project and I'm rying to use this hook in a plugin pulled from a (now archived) Shopify Slate theme tool. However without any documented upgrade path I've hit a dead end.

I understand that its been missing for years now, but if theres any documentaiton or thoughts on how it can replaced, I'd be greatly appreciative.

Expected behaviour ☀️

To have a documented replacement for htmlWebpackPluginAlterChunks

Reproduction Example 👾

https://github.com/Shopify/slate/blob/master/packages/slate-tools/tools/webpack/html-webpack-include-chunks.js

  constructor(options) {
    this.options = options;
    this.files = [];
  }

  apply(compiler) {
    compiler.hooks.compilation.tap(
      'htmlWebpackIncludeChunksPlugin',
      this.onCompilation.bind(this),
    );
  }

  onCompilation(compilation) {
    this.compilation = compilation;

    compilation.hooks.htmlWebpackPluginAlterChunks.tap(
      'htmlWebpackIncludeChunksPlugin',
      this.onAlterChunks.bind(this),
    );

    compilation.hooks.htmlWebpackPluginBeforeHtmlGeneration.tap(
      'htmlWebpackIncludeChunksPlugin',
      this.onBeforeHtmlGeneration.bind(this),
    );
  }

  onAlterChunks(chunks) {
    this.chunks = chunks;
  }

  onBeforeHtmlGeneration(htmlPluginData) {
    const assets = htmlPluginData.assets;
    const publicPath = assets.publicPath;

    this.chunks.forEach((chunk) => {
      const name = chunk.names[0];
      const chunkFiles = []
        .concat(chunk.files)
        .map((chunkFile) => publicPath + chunkFile);

      const css = chunkFiles
        .filter((chunkFile) => /.(css|scss)\.liquid($|\?)/.test(chunkFile))
        .map((chunkFile) => chunkFile.replace(/(\.css)?\.liquid$/, '.css'));

      assets.chunks[name].css = css;
      assets.css = assets.css.concat(css);
    });
  }
}

module.exports = HtmlWebpackIncludeLiquidStylesPlugin;

Environment 🖥

Node.js v16.15.0
darwin 21.5.0
8.5.5

├─┬ babel-loader@8.2.5
│ └── webpack@5.72.1 deduped
├─┬ clean-webpack-plugin@4.0.0
│ └── webpack@5.72.1 deduped
├─┬ css-loader@6.7.1
│ └── webpack@5.72.1 deduped
├─┬ css-minimizer-webpack-plugin@3.4.1
│ └── webpack@5.72.1 deduped
├─┬ eslint-webpack-plugin@3.1.1
│ └── webpack@5.72.1 deduped
├─┬ html-webpack-plugin@5.5.0
│ └── webpack@5.72.1 deduped
├─┬ mini-css-extract-plugin@2.6.0
│ └── webpack@5.72.1 deduped
├─┬ postcss-loader@6.2.1
│ └── webpack@5.72.1 deduped
├─┬ sass-loader@12.6.0
│ └── webpack@5.72.1 deduped
├─┬ source-map-loader@3.0.1
│ └── webpack@5.72.1 deduped
├─┬ stylelint-webpack-plugin@3.2.0
│ └── webpack@5.72.1 deduped
├─┬ url-loader@4.1.1
│ ├─┬ file-loader@6.2.0
│ │ └── webpack@5.72.1 deduped
│ └── webpack@5.72.1 deduped
├─┬ vue-loader@16.8.3
│ └── webpack@5.72.1 deduped
├─┬ webpack-cli@4.9.2
│ ├─┬ @webpack-cli/configtest@1.1.1
│ │ └── webpack@5.72.1 deduped
│ └── webpack@5.72.1 deduped
└── webpack@5.72.1
└── html-webpack-plugin@5.5.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions