Skip to content

Commit

Permalink
Fix mini-css-extract-plugin 0.4.3 issue
Browse files Browse the repository at this point in the history
mini-css-extract-plugin reports additional, incorrect information for files that are refenced in CSS. The first time we see the file the `module.userRequest` is correct, and we add to `moduleAssets` correctly. However mini-css-extract-plugin then also reports the same `file` but with `module.userRequest` set to the CSS file that references it, which caused us to overwrite the good value in `moduleAssets`.

See the change in mini-css-extract-plugin that caused this webpack-contrib/mini-css-extract-plugin#177

fixes #167
  • Loading branch information
karlvr authored and mastilver committed Sep 25, 2019
1 parent d5de73e commit 08fb497
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion lib/plugin.js
Expand Up @@ -49,6 +49,22 @@ ManifestPlugin.prototype.apply = function(compiler) {
}
};

// TODO: check with @evilebottnawi if this is still needed for webpack@5
var normalModuleLoader = function (loaderContext, module) {
const { emitFile } = loaderContext;

loaderContext.emitFile = (file, content, sourceMap) => {
if (module.userRequest && !moduleAssets[file]) {
moduleAssets[file] = path.join(
path.dirname(file),
path.basename(module.userRequest)
);
}

return emitFile.call(module, file, content, sourceMap);
};
};

var emit = function(compilation, compileCallback) {
const emitCount = emitCountMap.get(outputFile) - 1
emitCountMap.set(outputFile, emitCount);
Expand Down Expand Up @@ -214,7 +230,7 @@ ManifestPlugin.prototype.apply = function(compiler) {
compiler.hooks.webpackManifestPluginAfterEmit = new SyncWaterfallHook(['manifest']);

compiler.hooks.compilation.tap(pluginOptions, function (compilation) {
compilation.hooks.moduleAsset.tap(pluginOptions, moduleAsset);
compilation.hooks.normalModuleLoader.tap(pluginOptions, normalModuleLoader);
});
compiler.hooks.emit.tap(pluginOptions, emit);

Expand Down

0 comments on commit 08fb497

Please sign in to comment.