Skip to content
Merged
Next Next commit
Updates for Webpack 5
  • Loading branch information
alexgorbatchev committed Feb 19, 2021
commit 2d841ad9e2f692d66249da8fc618f9644cb1f6d6
41 changes: 35 additions & 6 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,43 @@ import pEachSeries from 'p-each-series';
import micromatch from 'micromatch';
import crypto from 'crypto';
import globby from 'globby';
import fs from 'fs';
import path from 'path';
import webpack from 'webpack';
import { promisify } from 'util';
import {
ensureTrailingSlash,
handleUrl,
resolveOutput,
resolvePublicPath,
} from './utils';

const fsReadFileAsync = promisify(fs.readFile);

/**
* Pushes the content of the given filename to the compilation assets
* @param {string} resolvedFilename
* @param {WebpackCompilation} compilation
* @returns {string} file basename
*/
function addFileToAssetsWebpack5(filename, compilation) {
const resolvedFilename = path.resolve(compilation.compiler.context, filename);

return fsReadFileAsync(resolvedFilename)
.then(source => new webpack.sources.RawSource(source, true))
.catch(() =>
Promise.reject(
new Error(`HtmlWebpackPlugin: could not load file ${resolvedFilename}`),
),
)
.then(rawSource => {
const basename = path.basename(resolvedFilename);
compilation.fileDependencies.add(resolvedFilename);
compilation.emitAsset(basename, rawSource);
return basename;
});
}

export default class AddAssetHtmlPlugin {
constructor(assets = []) {
this.assets = Array.isArray(assets) ? assets.slice().reverse() : [assets];
Expand All @@ -22,7 +52,7 @@ export default class AddAssetHtmlPlugin {
let beforeGenerationHook;
let alterAssetTagsHook;

if (HtmlWebpackPlugin.version === 4) {
if (HtmlWebpackPlugin.version >= 4) {
const hooks = HtmlWebpackPlugin.getHooks(compilation);

beforeGenerationHook = hooks.beforeAssetTagGeneration;
Expand Down Expand Up @@ -105,10 +135,8 @@ export default class AddAssetHtmlPlugin {
}
}

const addedFilename = await htmlPluginData.plugin.addFileToAssets(
filepath,
compilation,
);
const addedFilename = await (htmlPluginData.plugin.addFileToAssets ||
addFileToAssetsWebpack5)(filepath, compilation);

let suffix = '';
if (hash) {
Expand All @@ -133,7 +161,8 @@ export default class AddAssetHtmlPlugin {
const relatedFiles = await globby(`${filepath}.*`);
await Promise.all(
relatedFiles.sort().map(async relatedFile => {
const addedMapFilename = await htmlPluginData.plugin.addFileToAssets(
const addedMapFilename = await (htmlPluginData.plugin
.addFileToAssets || addFileToAssetsWebpack5)(
relatedFile,
compilation,
);
Expand Down