Skip to content

Commit e48f1f9

Browse files
committed
Fix bug with multiple entry point CSS ordering
1 parent 842195a commit e48f1f9

File tree

1 file changed

+38
-4
lines changed

1 file changed

+38
-4
lines changed

src/index.js

+38-4
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class MiniCssExtractPlugin {
138138
const renderedModules = Array.from(chunk.modulesIterable).filter(module => module.type === NS);
139139
if (renderedModules.length > 0) {
140140
result.push({
141-
render: () => this.renderContentAsset(renderedModules, compilation.runtimeTemplate.requestShortener),
141+
render: () => this.renderContentAsset(chunk, renderedModules, compilation.runtimeTemplate.requestShortener),
142142
filenameTemplate: this.options.filename,
143143
pathOptions: {
144144
chunk,
@@ -153,7 +153,7 @@ class MiniCssExtractPlugin {
153153
const renderedModules = Array.from(chunk.modulesIterable).filter(module => module.type === NS);
154154
if (renderedModules.length > 0) {
155155
result.push({
156-
render: () => this.renderContentAsset(renderedModules, compilation.runtimeTemplate.requestShortener),
156+
render: () => this.renderContentAsset(chunk, renderedModules, compilation.runtimeTemplate.requestShortener),
157157
filenameTemplate: this.options.chunkFilename,
158158
pathOptions: {
159159
chunk,
@@ -339,8 +339,42 @@ class MiniCssExtractPlugin {
339339
return obj;
340340
}
341341

342-
renderContentAsset(modules, requestShortener) {
343-
modules.sort((a, b) => a.index2 - b.index2);
342+
getCssModulesRecursiveHelper(module) {
343+
return module.dependencies
344+
.filter(dependency => dependency.module)
345+
.map((dependency) => {
346+
if (dependency.module instanceof CssModule) {
347+
return dependency.module;
348+
} else if (dependency.module.dependencies) {
349+
return this.getCssModulesRecursiveHelper(dependency.module);
350+
}
351+
return [];
352+
})
353+
.reduce((flattenedModules, dependency) => {
354+
if (Array.isArray(dependency)) {
355+
dependency.forEach((dep) => { if (dep) flattenedModules.push(dep); });
356+
} else if (dependency) {
357+
flattenedModules.push(dependency);
358+
}
359+
return flattenedModules;
360+
}, []);
361+
}
362+
363+
getCssModulesOrderMap(chunk) {
364+
const [shallowestModule] = Array.from(chunk.modulesIterable).sort((a, b) => a.depth - b.depth);
365+
366+
return this.getCssModulesRecursiveHelper(shallowestModule)
367+
.reduce((indexMap, module, i) => {
368+
// Only keep the first occurrence
369+
if (module.id in indexMap) return indexMap;
370+
return Object.assign(indexMap, { [module.id]: i });
371+
}, {});
372+
}
373+
374+
renderContentAsset(chunk, modules, requestShortener) {
375+
const idToIndexMap = this.getCssModulesOrderMap(chunk);
376+
modules.sort((a, b) => idToIndexMap[a.id] - idToIndexMap[b.id]);
377+
344378
const source = new ConcatSource();
345379
const externalsSource = new ConcatSource();
346380
for (const m of modules) {

0 commit comments

Comments
 (0)