Skip to content
Merged
Prev Previous commit
Next Next commit
fix: avoid prefetch/preload of loaded CSS files
  • Loading branch information
FogelAI committed Jul 13, 2023
commit d14f62c9d382b5cbaa7df12436bf236bfa42de82
29 changes: 28 additions & 1 deletion src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -845,9 +845,10 @@ class MiniCssExtractPlugin {
const { chunkGraph, chunk, runtimeRequirements } = this;
const {
runtimeTemplate,
outputOptions: { crossOriginLoading },
outputOptions: { chunkLoadingGlobal, crossOriginLoading },
} = this.compilation;
const chunkMap = getCssChunkObject(chunk, this.compilation);
const globalObject = runtimeTemplate.globalObject;
const { linkPreload, linkPrefetch } =
JsonpChunkLoadingRuntimeModule.getCompilationHooks(compilation);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please put these hooks here, i.e. just copy/paste, because this plugin can work not only with Jsonp, also with ESM modules

const conditionMap = chunkGraph.getChunkConditionMap(
Expand All @@ -868,6 +869,9 @@ class MiniCssExtractPlugin {
const withPreload = runtimeRequirements.has(
RuntimeGlobals.preloadChunkHandlers
);
const chunkLoadingGlobalExpr = `${globalObject}[${JSON.stringify(
chunkLoadingGlobal
)}]`;

if (!withLoading && !withHmr) {
return "";
Expand Down Expand Up @@ -993,6 +997,23 @@ class MiniCssExtractPlugin {
),
"};",
"",
`var webpackJsonpCallback = ${runtimeTemplate.basicFunction(
"parentChunkLoadingFunction, data",
[
runtimeTemplate.destructureArray(["chunkIds"], "data"),
"for(var i=0;i < chunkIds.length; i++) {",
Template.indent([
"var chunkId = chunkIds[i];",
"installedCssChunks[chunkId] = 0;",
]),
"}",
]
)}`,
"",
`var chunkLoadingGlobal = ${chunkLoadingGlobalExpr} = ${chunkLoadingGlobalExpr} || [];`,
"chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));",
"chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));",
"",
`${
RuntimeGlobals.ensureChunkHandlers
}.miniCss = ${runtimeTemplate.basicFunction(
Expand Down Expand Up @@ -1213,6 +1234,12 @@ class MiniCssExtractPlugin {
compilation.hooks.runtimeRequirementInTree
.for(RuntimeGlobals.hmrDownloadUpdateHandlers)
.tap(pluginName, handler);
compilation.hooks.runtimeRequirementInTree
.for(RuntimeGlobals.prefetchChunkHandlers)
.tap(pluginName, handler);
compilation.hooks.runtimeRequirementInTree
.for(RuntimeGlobals.preloadChunkHandlers)
.tap(pluginName, handler);
});
}

Expand Down