improve chunk splitting

by also trying to select combinations of module chunks
(limited by complexity)
fix size ordering (was reversed)
add chunk cound ordering
This commit is contained in:
Tobias Koppers 2018-02-16 09:12:01 +01:00
parent 4b30be4f6a
commit 1e73752fb2
23 changed files with 385 additions and 228 deletions

View File

@ -168,6 +168,7 @@ class WebpackOptionsDefaulter extends OptionsDefaulter {
this.set("optimization.usedExports", "make", options => isProductionLikeMode(options));
this.set("optimization.concatenateModules", "make", options => isProductionLikeMode(options));
this.set("optimization.splitChunks", {});
this.set("optimization.splitChunks.maxComplexity", "make", options => isProductionLikeMode(options) ? 3 : 1);
this.set("optimization.splitChunks.chunks", "async");
this.set("optimization.splitChunks.minSize", 30000);
this.set("optimization.splitChunks.minChunks", 1);

View File

@ -40,18 +40,41 @@ const isOverlap = (a, b) => {
return false;
};
const getCombinations = (array, maxDepth) => {
const results = [];
getCombinationsInteral(array, maxDepth, results);
return results;
};
const getCombinationsInteral = (array, maxDepth, results) => {
results.push(array);
if(maxDepth === 0 || array.length === 1) {
return;
}
for(let i = 0; i < array.length; i++) {
const newArray = array.slice(0, i).concat(array.slice(i + 1, array.length));
getCombinationsInteral(newArray, maxDepth - 1, results);
}
};
const compareEntries = (a, b) => {
// 1. by priority
const diffPriority = a.cacheGroup.priority - b.cacheGroup.priority;
if(diffPriority) return diffPriority;
// 2. by total modules size
const diffSize = b.size - a.size;
if(diffSize) return diffSize;
// 2. by number of chunks
const diffCount = a.chunks.size - b.chunks.size;
if(diffCount) return diffCount;
// 3. by size reduction
const aSizeReduce = a.size * (a.chunks.size - 1);
const bSizeReduce = b.size * (b.chunks.size - 1);
const diffSizeReduce = aSizeReduce - bSizeReduce;
if(diffSizeReduce) return diffSizeReduce;
// 4. by number of modules (to be able to compare by identifier)
const modulesA = a.modules;
const modulesB = b.modules;
// 3. by module identifiers
const diff = modulesA.size - modulesB.size;
if(diff) return diff;
// 5. by module identifiers
modulesA.sort();
modulesB.sort();
const aI = modulesA[Symbol.iterator]();
@ -74,6 +97,7 @@ module.exports = class SplitChunksPlugin {
static normalizeOptions(options) {
return {
maxComplexity: options.maxComplexity || 0,
chunks: options.chunks || "all",
minSize: options.minSize || 0,
minChunks: options.minChunks || 1,
@ -226,47 +250,53 @@ module.exports = class SplitChunksPlugin {
reuseExistingChunk: cacheGroupSource.reuseExistingChunk
};
// Select chunks by configuration
const selectedChunks = cacheGroup.chunks === "initial" ? chunks.filter(chunk => chunk.canBeInitial()) :
const maxSelectedChunks = cacheGroup.chunks === "initial" ? chunks.filter(chunk => chunk.canBeInitial()) :
cacheGroup.chunks === "async" ? chunks.filter(chunk => !chunk.canBeInitial()) :
chunks;
// Get indices of chunks in which this module occurs
const chunkIndices = selectedChunks.map(chunk => indexMap.get(chunk));
// Break if minimum number of chunks is not reached
if(chunkIndices.length < cacheGroup.minChunks)
continue;
// Determine name for split chunk
const name = cacheGroup.getName(module, selectedChunks, cacheGroup.key);
// Create key for maps
// When it has a name we use the name as key
// Elsewise we create the key from chunks and cache group key
// This automatically merges equal names
const chunksKey = chunkIndices.sort().join();
const key = name && `name:${name}` ||
`chunks:${chunksKey} key:${cacheGroup.key}`;
// Add module to maps
let info = chunksInfoMap.get(key);
if(info === undefined) {
chunksInfoMap.set(key, info = {
modules: new SortableSet(undefined, sortByIdentifier),
cacheGroup,
name,
chunks: new Map(),
reusedableChunks: new Set(),
chunksKeys: new Set()
});
}
info.modules.add(module);
if(!info.chunksKeys.has(chunksKey)) {
info.chunksKeys.add(chunksKey);
for(const chunk of selectedChunks) {
info.chunks.set(chunk, chunk.getNumberOfModules());
// For all (nearly all) combination of chunk selection
for(const selectedChunks of getCombinations(maxSelectedChunks, this.options.maxComplexity)) {
// Get indices of chunks in which this module occurs
const chunkIndices = selectedChunks.map(chunk => indexMap.get(chunk));
// Break if minimum number of chunks is not reached
if(chunkIndices.length < cacheGroup.minChunks)
continue;
// Determine name for split chunk
const name = cacheGroup.getName(module, selectedChunks, cacheGroup.key);
// Create key for maps
// When it has a name we use the name as key
// Elsewise we create the key from chunks and cache group key
// This automatically merges equal names
const chunksKey = chunkIndices.sort().join();
const key = name && `name:${name}` ||
`chunks:${chunksKey} key:${cacheGroup.key}`;
// Add module to maps
let info = chunksInfoMap.get(key);
if(info === undefined) {
chunksInfoMap.set(key, info = {
modules: new SortableSet(undefined, sortByIdentifier),
cacheGroup,
name,
chunks: new Map(),
reusedableChunks: new Set(),
chunksKeys: new Set()
});
}
info.modules.add(module);
if(!info.chunksKeys.has(chunksKey)) {
info.chunksKeys.add(chunksKey);
for(const chunk of selectedChunks) {
info.chunks.set(chunk, chunk.getNumberOfModules());
}
}
}
}
}
for(const info of chunksInfoMap.values()) {
for(const [key, info] of chunksInfoMap) {
// Get size of module lists
info.size = getModulesSize(info.modules);
if(info.size < info.cacheGroup.minSize) {
chunksInfoMap.delete(key);
}
}
let changed = false;
while(chunksInfoMap.size > 0) {
@ -286,10 +316,7 @@ module.exports = class SplitChunksPlugin {
}
const item = bestEntry;
if(item.size < item.cacheGroup.minSize) {
chunksInfoMap.delete(bestEntryKey);
continue;
}
chunksInfoMap.delete(bestEntryKey);
let chunkName = item.name;
// Variable for the new chunk (lazy created)
@ -357,21 +384,25 @@ module.exports = class SplitChunksPlugin {
}
}
// remove all modules from other entries and update size
for(const info of chunksInfoMap.values()) {
for(const [key, info] of chunksInfoMap) {
if(isOverlap(info.chunks, item.chunks)) {
const oldSize = info.modules.size;
for(const module of item.modules) {
info.modules.delete(module);
}
if(info.modules.size === 0) {
chunksInfoMap.delete(key);
continue;
}
if(info.modules.size !== oldSize) {
info.size = getModulesSize(info.modules);
if(info.size < info.cacheGroup.minSize)
chunksInfoMap.delete(key);
}
}
}
changed = true;
}
chunksInfoMap.delete(bestEntryKey);
}
if(changed) return true;
});

View File

@ -1335,6 +1335,11 @@
"type": "object",
"additionalProperties": false,
"properties": {
"maxComplexity": {
"description": "Limits the algorithmic complexity",
"type": "number",
"minimum": 0
},
"chunks": {
"description": "Select chunks for determining shared modules (defaults to \"async\", \"initial\" and \"all\" requires adding these chunks to the HTML)",
"enum": [

View File

@ -62,52 +62,52 @@ Child default:
Entrypoint a = default/a.js
Entrypoint b = default/b.js
Entrypoint c = default/c.js
chunk {0} default/vendors~async-a~async-b~async-c.js (vendors~async-a~async-b~async-c) 20 bytes <{9}> ={8}= ={1}= ={3}= ={7}= ={2}= ={6}= ={5}= >{3}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b~async-c)
chunk {0} default/vendors~async-a~async-b~async-c.js (vendors~async-a~async-b~async-c) 20 bytes <{9}> ={8}= ={1}= ={2}= ={7}= ={3}= ={6}= ={5}= >{2}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b~async-c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
chunk {1} default/async-a~async-b~async-c.js (async-a~async-b~async-c) 20 bytes <{9}> ={0}= ={8}= ={3}= ={7}= ={2}= ={6}= ={5}= >{3}< >{4}< [rendered] split chunk (cache group: default) (name: async-a~async-b~async-c)
chunk {1} default/async-a~async-b~async-c.js (async-a~async-b~async-c) 20 bytes <{9}> ={0}= ={8}= ={2}= ={7}= ={3}= ={6}= ={5}= >{2}< >{4}< [rendered] split chunk (cache group: default) (name: async-a~async-b~async-c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
chunk {2} default/vendors~async-a~async-b.js (vendors~async-a~async-b) 20 bytes <{9}> ={0}= ={1}= ={6}= ={5}= >{3}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b)
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
chunk {3} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{2}> <{1}> <{5}> <{10}> <{9}> ={4}= ={0}= ={8}= ={1}= ={7}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)
chunk {2} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{3}> <{1}> <{5}> <{10}> <{9}> ={4}= ={0}= ={8}= ={1}= ={7}= ={3}= ={6}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
chunk {4} default/async-g.js (async-g) 34 bytes <{0}> <{2}> <{1}> <{5}> <{10}> ={3}= [rendered]
> ./b [8] ./index.js 2:0-47
[2] ./f.js 20 bytes {2} {11} {12} [built]
chunk {3} default/vendors~async-a~async-b.js (vendors~async-a~async-b) 20 bytes <{9}> ={0}= ={1}= ={2}= ={6}= ={5}= >{2}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b)
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {3} {10} {11} [built]
chunk {4} default/async-g.js (async-g) 34 bytes <{0}> <{3}> <{1}> <{5}> <{10}> ={2}= [rendered]
> ./g [] 6:0-47
> ./g [] 6:0-47
[9] ./g.js 34 bytes {4} [built]
chunk {5} default/async-a.js (async-a) 156 bytes <{9}> ={0}= ={2}= ={1}= >{3}< >{4}< [rendered]
chunk {5} default/async-a.js (async-a) 156 bytes <{9}> ={0}= ={3}= ={1}= >{2}< >{4}< [rendered]
> ./a [8] ./index.js 1:0-47
[7] ./a.js + 1 modules 156 bytes {5} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {6} default/async-b.js (async-b) 92 bytes <{9}> ={0}= ={2}= ={1}= [rendered]
chunk {6} default/async-b.js (async-b) 72 bytes <{9}> ={0}= ={3}= ={1}= ={2}= [rendered]
> ./b [8] ./index.js 2:0-47
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
[5] ./b.js 72 bytes {6} {11} [built]
chunk {7} default/async-c.js (async-c) 72 bytes <{9}> ={0}= ={8}= ={1}= ={3}= [rendered]
chunk {7} default/async-c.js (async-c) 72 bytes <{9}> ={0}= ={8}= ={1}= ={2}= [rendered]
> ./c [8] ./index.js 3:0-47
[6] ./c.js 72 bytes {7} {12} [built]
chunk {8} default/vendors~async-c.js (vendors~async-c) 20 bytes <{9}> ={0}= ={1}= ={3}= ={7}= [rendered] split chunk (cache group: vendors) (name: vendors~async-c)
chunk {8} default/vendors~async-c.js (vendors~async-c) 20 bytes <{9}> ={0}= ={1}= ={2}= ={7}= [rendered] split chunk (cache group: vendors) (name: vendors~async-c)
> ./c [8] ./index.js 3:0-47
[4] ./node_modules/z.js 20 bytes {8} {12} [built]
chunk {9} default/main.js (main) 147 bytes >{0}< >{2}< >{1}< >{5}< >{6}< >{8}< >{3}< >{7}< [entry] [rendered]
chunk {9} default/main.js (main) 147 bytes >{0}< >{3}< >{1}< >{2}< >{6}< >{5}< >{8}< >{7}< [entry] [rendered]
> ./ main
[8] ./index.js 147 bytes {9} [built]
chunk {10} default/a.js (a) 216 bytes >{3}< >{4}< [entry] [rendered]
chunk {10} default/a.js (a) 216 bytes >{2}< >{4}< [entry] [rendered]
> ./a a
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
[3] ./node_modules/y.js 20 bytes {3} {10} {11} [built]
[7] ./a.js + 1 modules 156 bytes {5} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
@ -115,14 +115,14 @@ Child default:
> ./b b
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
[2] ./f.js 20 bytes {2} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {3} {10} {11} [built]
[5] ./b.js 72 bytes {6} {11} [built]
chunk {12} default/c.js (c) 152 bytes [entry] [rendered]
> ./c c
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
[2] ./f.js 20 bytes {2} {11} {12} [built]
[4] ./node_modules/z.js 20 bytes {8} {12} [built]
[6] ./c.js 72 bytes {7} {12} [built]
Child vendors:
@ -185,10 +185,10 @@ Child vendors:
[6] ./c.js 72 bytes {3} {8} [built]
Child multiple-vendors:
Entrypoint main = multiple-vendors/main.js
Entrypoint a = multiple-vendors/libs-x.js multiple-vendors/a.js
Entrypoint b = multiple-vendors/libs-x.js multiple-vendors/b.js
Entrypoint c = multiple-vendors/libs-x.js multiple-vendors/c.js
chunk {0} multiple-vendors/libs-x.js (libs-x) 20 bytes <{9}> ={12}= ={11}= ={10}= ={7}= ={1}= ={6}= ={2}= ={5}= ={4}= >{8}< >{3}< [initial] [rendered] split chunk (cache group: libs) (name: libs-x)
Entrypoint a = multiple-vendors/libs-x.js multiple-vendors/vendors~a~async-a~async-b~b.js multiple-vendors/a.js
Entrypoint b = multiple-vendors/libs-x.js multiple-vendors/vendors~a~async-a~async-b~b.js multiple-vendors/b.js
Entrypoint c = multiple-vendors/libs-x.js multiple-vendors/vendors~async-c~c.js multiple-vendors/c.js
chunk {0} multiple-vendors/libs-x.js (libs-x) 20 bytes <{9}> ={4}= ={12}= ={3}= ={11}= ={10}= ={1}= ={2}= ={7}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: libs) (name: libs-x)
> ./c c
> ./b b
> ./a a
@ -196,126 +196,126 @@ Child multiple-vendors:
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[2] ./node_modules/x.js 20 bytes {0} [built]
chunk {1} multiple-vendors/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={0}= ={7}= ={6}= ={2}= ={5}= ={4}= >{8}< >{3}< [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[1] ./d.js 20 bytes {1} {10} {11} {12} [built]
chunk {2} multiple-vendors/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{9}> ={0}= ={1}= ={5}= ={4}= >{8}< >{3}< [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
chunk {3} multiple-vendors/async-g.js (async-g) 34 bytes <{0}> <{10}> <{2}> <{1}> <{4}> ={8}= [rendered]
> ./g [] 6:0-47
> ./g [] 6:0-47
[9] ./g.js 34 bytes {3} [built]
chunk {4} multiple-vendors/async-a.js (async-a) 156 bytes <{9}> ={0}= ={2}= ={1}= >{8}< >{3}< [rendered]
> ./a [8] ./index.js 1:0-47
[7] ./a.js + 1 modules 156 bytes {4} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {5} multiple-vendors/async-b.js (async-b) 92 bytes <{9}> ={0}= ={2}= ={1}= [rendered]
> ./b [8] ./index.js 2:0-47
[0] ./f.js 20 bytes {5} {6} {8} {11} {12} [built]
[5] ./b.js 72 bytes {5} {11} [built]
chunk {6} multiple-vendors/async-c.js (async-c) 92 bytes <{9}> ={0}= ={7}= ={1}= [rendered]
> ./c [8] ./index.js 3:0-47
[0] ./f.js 20 bytes {5} {6} {8} {11} {12} [built]
[6] ./c.js 72 bytes {6} {12} [built]
chunk {7} multiple-vendors/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{9}> ={0}= ={1}= ={6}= [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)
> ./c [8] ./index.js 3:0-47
[4] ./node_modules/z.js 20 bytes {7} {12} [built]
chunk {8} multiple-vendors/async-b~async-c~async-g~b~c.js (async-b~async-c~async-g~b~c) 20 bytes <{0}> <{10}> <{2}> <{1}> <{4}> ={3}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~b~c)
> ./g [] 6:0-47
> ./g [] 6:0-47
[0] ./f.js 20 bytes {5} {6} {8} {11} {12} [built]
chunk {9} multiple-vendors/main.js (main) 147 bytes >{0}< >{2}< >{1}< >{4}< >{5}< >{7}< >{6}< [entry] [rendered]
> ./ main
[8] ./index.js 147 bytes {9} [built]
chunk {10} multiple-vendors/a.js (a) 196 bytes ={0}= >{8}< >{3}< [entry] [rendered]
> ./a a
[1] ./d.js 20 bytes {1} {10} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
[7] ./a.js + 1 modules 156 bytes {4} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {11} multiple-vendors/b.js (b) 132 bytes ={0}= [entry] [rendered]
> ./b b
[0] ./f.js 20 bytes {5} {6} {8} {11} {12} [built]
[1] ./d.js 20 bytes {1} {10} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
[5] ./b.js 72 bytes {5} {11} [built]
chunk {12} multiple-vendors/c.js (c) 132 bytes ={0}= [entry] [rendered]
> ./c c
[0] ./f.js 20 bytes {5} {6} {8} {11} {12} [built]
[1] ./d.js 20 bytes {1} {10} {11} {12} [built]
[4] ./node_modules/z.js 20 bytes {7} {12} [built]
[6] ./c.js 72 bytes {6} {12} [built]
Child all:
Entrypoint main = all/main.js
Entrypoint a = all/vendors~a~async-a~async-b~async-c~b~c.js all/a~async-a~async-b~b.js all/a.js
Entrypoint b = all/vendors~a~async-a~async-b~async-c~b~c.js all/a~async-a~async-b~b.js all/b.js
Entrypoint c = all/vendors~a~async-a~async-b~async-c~b~c.js all/vendors~async-c~c.js all/c.js
chunk {0} all/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={4}= ={12}= ={3}= ={11}= ={10}= ={1}= ={2}= ={8}= ={7}= ={6}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~async-c~b~c)
> ./c c
> ./b b
> ./a a
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[2] ./node_modules/x.js 20 bytes {0} [built]
chunk {1} all/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={0}= ={4}= ={2}= ={8}= ={3}= ={7}= ={6}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)
chunk {1} multiple-vendors/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={0}= ={4}= ={2}= ={7}= ={3}= ={6}= ={8}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
chunk {2} all/async-b~async-c~async-g~b~c.js (async-b~async-c~async-g~b~c) 20 bytes <{0}> <{3}> <{1}> <{6}> <{10}> <{9}> ={5}= ={0}= ={4}= ={1}= ={8}= ={3}= ={7}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~b~c)
chunk {2} multiple-vendors/async-b~async-c~async-g~b~c.js (async-b~async-c~async-g~b~c) 20 bytes <{0}> <{3}> <{1}> <{8}> <{10}> <{9}> ={5}= ={0}= ={4}= ={1}= ={7}= ={3}= ={6}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~b~c)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
[1] ./f.js 20 bytes {2} {11} {12} [built]
chunk {3} all/a~async-a~async-b~b.js (a~async-a~async-b~b) 20 bytes <{9}> ={0}= ={11}= ={10}= ={1}= ={2}= ={7}= ={6}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)
chunk {3} multiple-vendors/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{9}> ={0}= ={11}= ={10}= ={1}= ={2}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)
> ./b b
> ./a a
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {3} [built]
chunk {4} all/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{9}> ={0}= ={12}= ={1}= ={2}= ={8}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)
chunk {4} multiple-vendors/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{9}> ={0}= ={12}= ={1}= ={2}= ={7}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)
> ./c c
> ./c [8] ./index.js 3:0-47
[7] ./node_modules/z.js 20 bytes {4} [built]
chunk {5} all/async-g.js (async-g) 34 bytes <{0}> <{3}> <{1}> <{6}> <{10}> ={2}= [rendered]
chunk {5} multiple-vendors/async-g.js (async-g) 34 bytes <{0}> <{3}> <{1}> <{8}> <{10}> ={2}= [rendered]
> ./g [] 6:0-47
> ./g [] 6:0-47
[9] ./g.js 34 bytes {5} [built]
chunk {6} all/async-a.js (async-a) 156 bytes <{9}> ={0}= ={3}= ={1}= >{2}< >{5}< [rendered]
chunk {6} multiple-vendors/async-b.js (async-b) 72 bytes <{9}> ={0}= ={3}= ={1}= ={2}= [rendered]
> ./b [8] ./index.js 2:0-47
[4] ./b.js 72 bytes {6} {11} [built]
chunk {7} multiple-vendors/async-c.js (async-c) 72 bytes <{9}> ={0}= ={4}= ={1}= ={2}= [rendered]
> ./c [8] ./index.js 3:0-47
[5] ./c.js 72 bytes {7} {12} [built]
chunk {8} multiple-vendors/a~async-a.js (a~async-a) 156 bytes <{9}> ={0}= ={3}= ={1}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a)
> ./a [8] ./index.js 1:0-47
[6] ./a.js + 1 modules 156 bytes {6} {10} [built]
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {7} all/async-b.js (async-b) 72 bytes <{9}> ={0}= ={3}= ={1}= ={2}= [rendered]
> ./b [8] ./index.js 2:0-47
[4] ./b.js 72 bytes {7} {11} [built]
chunk {8} all/async-c.js (async-c) 72 bytes <{9}> ={0}= ={4}= ={1}= ={2}= [rendered]
chunk {9} multiple-vendors/main.js (main) 147 bytes >{0}< >{3}< >{1}< >{2}< >{6}< >{8}< >{4}< >{7}< [entry] [rendered]
> ./ main
[8] ./index.js 147 bytes {9} [built]
chunk {10} multiple-vendors/a.js (a) 176 bytes ={0}= ={3}= >{2}< >{5}< [entry] [rendered]
> ./a a
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {11} multiple-vendors/b.js (b) 112 bytes ={0}= ={3}= [entry] [rendered]
> ./b b
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[4] ./b.js 72 bytes {6} {11} [built]
chunk {12} multiple-vendors/c.js (c) 112 bytes ={0}= ={4}= [entry] [rendered]
> ./c c
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[5] ./c.js 72 bytes {7} {12} [built]
Child all:
Entrypoint main = all/main.js
Entrypoint a = all/vendors~a~async-a~async-b~async-c~b~c.js all/vendors~a~async-a~async-b~b.js all/a.js
Entrypoint b = all/vendors~a~async-a~async-b~async-c~b~c.js all/vendors~a~async-a~async-b~b.js all/b.js
Entrypoint c = all/vendors~a~async-a~async-b~async-c~b~c.js all/vendors~async-c~c.js all/c.js
chunk {0} all/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={4}= ={12}= ={3}= ={11}= ={10}= ={1}= ={2}= ={7}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~async-c~b~c)
> ./c c
> ./b b
> ./a a
> ./c [8] ./index.js 3:0-47
[5] ./c.js 72 bytes {8} {12} [built]
chunk {9} all/main.js (main) 147 bytes >{0}< >{3}< >{1}< >{2}< >{7}< >{6}< >{4}< >{8}< [entry] [rendered]
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[2] ./node_modules/x.js 20 bytes {0} [built]
chunk {1} all/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={0}= ={4}= ={2}= ={7}= ={3}= ={6}= ={8}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
chunk {2} all/async-b~async-c~async-g~b~c.js (async-b~async-c~async-g~b~c) 20 bytes <{0}> <{3}> <{1}> <{8}> <{10}> <{9}> ={5}= ={0}= ={4}= ={1}= ={7}= ={3}= ={6}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~b~c)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
[1] ./f.js 20 bytes {2} {11} {12} [built]
chunk {3} all/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{9}> ={0}= ={11}= ={10}= ={1}= ={2}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)
> ./b b
> ./a a
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {3} [built]
chunk {4} all/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{9}> ={0}= ={12}= ={1}= ={2}= ={7}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)
> ./c c
> ./c [8] ./index.js 3:0-47
[7] ./node_modules/z.js 20 bytes {4} [built]
chunk {5} all/async-g.js (async-g) 34 bytes <{0}> <{3}> <{1}> <{8}> <{10}> ={2}= [rendered]
> ./g [] 6:0-47
> ./g [] 6:0-47
[9] ./g.js 34 bytes {5} [built]
chunk {6} all/async-b.js (async-b) 72 bytes <{9}> ={0}= ={3}= ={1}= ={2}= [rendered]
> ./b [8] ./index.js 2:0-47
[4] ./b.js 72 bytes {6} {11} [built]
chunk {7} all/async-c.js (async-c) 72 bytes <{9}> ={0}= ={4}= ={1}= ={2}= [rendered]
> ./c [8] ./index.js 3:0-47
[5] ./c.js 72 bytes {7} {12} [built]
chunk {8} all/a~async-a.js (a~async-a) 156 bytes <{9}> ={0}= ={3}= ={1}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a)
> ./a [8] ./index.js 1:0-47
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {9} all/main.js (main) 147 bytes >{0}< >{3}< >{1}< >{2}< >{6}< >{8}< >{4}< >{7}< [entry] [rendered]
> ./ main
[8] ./index.js 147 bytes {9} [built]
chunk {10} all/a.js (a) 176 bytes ={0}= ={3}= >{2}< >{5}< [entry] [rendered]
> ./a a
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[6] ./a.js + 1 modules 156 bytes {6} {10} [built]
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {11} all/b.js (b) 112 bytes ={0}= ={3}= [entry] [rendered]
> ./b b
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[4] ./b.js 72 bytes {7} {11} [built]
[4] ./b.js 72 bytes {6} {11} [built]
chunk {12} all/c.js (c) 112 bytes ={0}= ={4}= [entry] [rendered]
> ./c c
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[5] ./c.js 72 bytes {8} {12} [built]
[5] ./c.js 72 bytes {7} {12} [built]

View File

@ -0,0 +1,3 @@
import "./d";
import "./e";
export default "a";

View File

@ -0,0 +1,3 @@
import "./d";
import "./e";
export default "b";

View File

@ -0,0 +1,2 @@
import "./d";
export default "a";

View File

@ -0,0 +1 @@
// content content content content content content content content

View File

@ -0,0 +1 @@
// content content content content content content content content

View File

@ -0,0 +1,19 @@
Entrypoint main = main.js
chunk {0} async-a~async-b.js (async-a~async-b) 134 bytes <{4}> ={2}= ={1}= [rendered] split chunk (cache group: default) (name: async-a~async-b)
> ./b [5] ./index.js 2:0-47
> ./a [5] ./index.js 1:0-47
[0] ./d.js 67 bytes {0} {3} [built]
[1] ./e.js 67 bytes {0} [built]
chunk {1} async-a.js (async-a) 48 bytes <{4}> ={0}= [rendered]
> ./a [5] ./index.js 1:0-47
[2] ./a.js 48 bytes {1} [built]
chunk {2} async-b.js (async-b) 48 bytes <{4}> ={0}= [rendered]
> ./b [5] ./index.js 2:0-47
[3] ./b.js 48 bytes {2} [built]
chunk {3} async-c.js (async-c) 101 bytes <{4}> [rendered]
> ./c [5] ./index.js 3:0-47
[0] ./d.js 67 bytes {0} {3} [built]
[4] ./c.js 34 bytes {3} [built]
chunk {4} main.js (main) 147 bytes >{0}< >{1}< >{2}< >{3}< [entry] [rendered]
> ./ main
[5] ./index.js 147 bytes {4} [built]

View File

@ -0,0 +1 @@
// content content content content content

View File

@ -0,0 +1,3 @@
import(/* webpackChunkName: "async-a" */ "./a");
import(/* webpackChunkName: "async-b" */ "./b");
import(/* webpackChunkName: "async-c" */ "./c");

View File

@ -0,0 +1,25 @@
const stats = {
hash: false,
timings: false,
builtAt: false,
assets: false,
chunks: true,
chunkOrigins: true,
entrypoints: true,
modules: false
};
module.exports = {
mode: "production",
entry: {
main: "./"
},
output: {
filename: "[name].js"
},
optimization: {
splitChunks: {
minSize: 100
}
},
stats
};

View File

@ -0,0 +1,3 @@
import "./d";
import "./e";
export default "a";

View File

@ -0,0 +1,4 @@
import "./d";
import "./e";
import "./f";
export default "b";

View File

@ -0,0 +1,3 @@
import "./d";
import "./f";
export default "a";

View File

@ -0,0 +1 @@
// content content content content content

View File

@ -0,0 +1 @@
// content content content content content

View File

@ -0,0 +1,21 @@
Entrypoint main = default/main.js
chunk {0} default/async-b~async-c.js (async-b~async-c) 110 bytes <{4}> ={3}= ={2}= [rendered] split chunk (cache group: default) (name: async-b~async-c)
> ./c [6] ./index.js 3:0-47
> ./b [6] ./index.js 2:0-47
[0] ./d.js 43 bytes {0} {1} [built]
[2] ./f.js 67 bytes {0} [built]
chunk {1} default/async-a.js (async-a) 134 bytes <{4}> [rendered]
> ./a [6] ./index.js 1:0-47
[0] ./d.js 43 bytes {0} {1} [built]
[1] ./e.js 43 bytes {1} {2} [built]
[3] ./a.js 48 bytes {1} [built]
chunk {2} default/async-b.js (async-b) 105 bytes <{4}> ={0}= [rendered]
> ./b [6] ./index.js 2:0-47
[1] ./e.js 43 bytes {1} {2} [built]
[4] ./b.js 62 bytes {2} [built]
chunk {3} default/async-c.js (async-c) 48 bytes <{4}> ={0}= [rendered]
> ./c [6] ./index.js 3:0-47
[5] ./c.js 48 bytes {3} [built]
chunk {4} default/main.js (main) 147 bytes >{0}< >{2}< >{3}< >{1}< [entry] [rendered]
> ./ main
[6] ./index.js 147 bytes {4} [built]

View File

@ -0,0 +1 @@
// content content content content content content content content

View File

@ -0,0 +1,3 @@
import(/* webpackChunkName: "async-a" */ "./a");
import(/* webpackChunkName: "async-b" */ "./b");
import(/* webpackChunkName: "async-c" */ "./c");

View File

@ -0,0 +1,25 @@
const stats = {
hash: false,
timings: false,
builtAt: false,
assets: false,
chunks: true,
chunkOrigins: true,
entrypoints: true,
modules: false
};
module.exports = {
mode: "production",
entry: {
main: "./",
},
output: {
filename: "default/[name].js"
},
optimization: {
splitChunks: {
minSize: 80
}
},
stats
};

View File

@ -3,52 +3,52 @@ Child default:
Entrypoint a = default/a.js
Entrypoint b = default/b.js
Entrypoint c = default/c.js
chunk {0} default/vendors~async-a~async-b~async-c.js (vendors~async-a~async-b~async-c) 20 bytes <{9}> ={8}= ={1}= ={3}= ={7}= ={2}= ={6}= ={5}= >{3}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b~async-c)
chunk {0} default/vendors~async-a~async-b~async-c.js (vendors~async-a~async-b~async-c) 20 bytes <{9}> ={8}= ={1}= ={2}= ={7}= ={3}= ={6}= ={5}= >{2}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b~async-c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
chunk {1} default/async-a~async-b~async-c.js (async-a~async-b~async-c) 20 bytes <{9}> ={0}= ={8}= ={3}= ={7}= ={2}= ={6}= ={5}= >{3}< >{4}< [rendered] split chunk (cache group: default) (name: async-a~async-b~async-c)
chunk {1} default/async-a~async-b~async-c.js (async-a~async-b~async-c) 20 bytes <{9}> ={0}= ={8}= ={2}= ={7}= ={3}= ={6}= ={5}= >{2}< >{4}< [rendered] split chunk (cache group: default) (name: async-a~async-b~async-c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
chunk {2} default/vendors~async-a~async-b.js (vendors~async-a~async-b) 20 bytes <{9}> ={0}= ={1}= ={6}= ={5}= >{3}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b)
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
chunk {3} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{2}> <{1}> <{5}> <{10}> <{9}> ={4}= ={0}= ={8}= ={1}= ={7}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)
chunk {2} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{3}> <{1}> <{5}> <{10}> <{9}> ={4}= ={0}= ={8}= ={1}= ={7}= ={3}= ={6}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
chunk {4} default/async-g.js (async-g) 34 bytes <{0}> <{2}> <{1}> <{5}> <{10}> ={3}= [rendered]
> ./b [8] ./index.js 2:0-47
[2] ./f.js 20 bytes {2} {11} {12} [built]
chunk {3} default/vendors~async-a~async-b.js (vendors~async-a~async-b) 20 bytes <{9}> ={0}= ={1}= ={2}= ={6}= ={5}= >{2}< >{4}< [rendered] split chunk (cache group: vendors) (name: vendors~async-a~async-b)
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {3} {10} {11} [built]
chunk {4} default/async-g.js (async-g) 34 bytes <{0}> <{3}> <{1}> <{5}> <{10}> ={2}= [rendered]
> ./g [] 6:0-47
> ./g [] 6:0-47
[9] ./g.js 34 bytes {4} [built]
chunk {5} default/async-a.js (async-a) 156 bytes <{9}> ={0}= ={2}= ={1}= >{3}< >{4}< [rendered]
chunk {5} default/async-a.js (async-a) 156 bytes <{9}> ={0}= ={3}= ={1}= >{2}< >{4}< [rendered]
> ./a [8] ./index.js 1:0-47
[7] ./a.js + 1 modules 156 bytes {5} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {6} default/async-b.js (async-b) 92 bytes <{9}> ={0}= ={2}= ={1}= [rendered]
chunk {6} default/async-b.js (async-b) 72 bytes <{9}> ={0}= ={3}= ={1}= ={2}= [rendered]
> ./b [8] ./index.js 2:0-47
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
[5] ./b.js 72 bytes {6} {11} [built]
chunk {7} default/async-c.js (async-c) 72 bytes <{9}> ={0}= ={8}= ={1}= ={3}= [rendered]
chunk {7} default/async-c.js (async-c) 72 bytes <{9}> ={0}= ={8}= ={1}= ={2}= [rendered]
> ./c [8] ./index.js 3:0-47
[6] ./c.js 72 bytes {7} {12} [built]
chunk {8} default/vendors~async-c.js (vendors~async-c) 20 bytes <{9}> ={0}= ={1}= ={3}= ={7}= [rendered] split chunk (cache group: vendors) (name: vendors~async-c)
chunk {8} default/vendors~async-c.js (vendors~async-c) 20 bytes <{9}> ={0}= ={1}= ={2}= ={7}= [rendered] split chunk (cache group: vendors) (name: vendors~async-c)
> ./c [8] ./index.js 3:0-47
[4] ./node_modules/z.js 20 bytes {8} {12} [built]
chunk {9} default/main.js (main) 147 bytes >{0}< >{2}< >{1}< >{5}< >{6}< >{8}< >{3}< >{7}< [entry] [rendered]
chunk {9} default/main.js (main) 147 bytes >{0}< >{3}< >{1}< >{2}< >{6}< >{5}< >{8}< >{7}< [entry] [rendered]
> ./ main
[8] ./index.js 147 bytes {9} [built]
chunk {10} default/a.js (a) 216 bytes >{3}< >{4}< [entry] [rendered]
chunk {10} default/a.js (a) 216 bytes >{2}< >{4}< [entry] [rendered]
> ./a a
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
[3] ./node_modules/y.js 20 bytes {3} {10} {11} [built]
[7] ./a.js + 1 modules 156 bytes {5} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
@ -56,14 +56,14 @@ Child default:
> ./b b
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {2} {10} {11} [built]
[2] ./f.js 20 bytes {2} {11} {12} [built]
[3] ./node_modules/y.js 20 bytes {3} {10} {11} [built]
[5] ./b.js 72 bytes {6} {11} [built]
chunk {12} default/c.js (c) 152 bytes [entry] [rendered]
> ./c c
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./node_modules/x.js 20 bytes {0} {10} {11} {12} [built]
[2] ./f.js 20 bytes {3} {6} {11} {12} [built]
[2] ./f.js 20 bytes {2} {11} {12} [built]
[4] ./node_modules/z.js 20 bytes {8} {12} [built]
[6] ./c.js 72 bytes {7} {12} [built]
Child all-chunks:
@ -71,7 +71,7 @@ Child all-chunks:
Entrypoint a = default/vendors~a~async-a~async-b~async-c~b~c.js default/vendors~a~async-a~async-b~b.js default/a.js
Entrypoint b = default/vendors~a~async-a~async-b~async-c~b~c.js default/vendors~a~async-a~async-b~b.js default/b.js
Entrypoint c = default/vendors~a~async-a~async-b~async-c~b~c.js default/vendors~async-c~c.js default/c.js
chunk {0} default/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={4}= ={12}= ={2}= ={11}= ={10}= ={1}= ={3}= ={8}= ={7}= ={6}= >{3}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~async-c~b~c)
chunk {0} default/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={4}= ={12}= ={3}= ={11}= ={10}= ={1}= ={2}= ={7}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~async-c~b~c)
> ./c c
> ./b b
> ./a a
@ -79,61 +79,61 @@ Child all-chunks:
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[2] ./node_modules/x.js 20 bytes {0} [built]
chunk {1} default/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={0}= ={4}= ={3}= ={8}= ={2}= ={7}= ={6}= >{3}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)
chunk {1} default/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{9}> ={0}= ={4}= ={2}= ={7}= ={3}= ={6}= ={8}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
chunk {2} default/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{9}> ={0}= ={11}= ={10}= ={1}= ={7}= ={6}= >{3}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)
chunk {2} default/async-b~async-c~async-g~b~c.js (async-b~async-c~async-g~b~c) 20 bytes <{0}> <{3}> <{1}> <{8}> <{10}> <{9}> ={5}= ={0}= ={4}= ={1}= ={7}= ={3}= ={6}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~b~c)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
[1] ./f.js 20 bytes {2} {11} {12} [built]
chunk {3} default/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{9}> ={0}= ={11}= ={10}= ={1}= ={2}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)
> ./b b
> ./a a
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {2} [built]
chunk {3} default/async-b~async-c~async-g~b~c.js (async-b~async-c~async-g~b~c) 20 bytes <{0}> <{2}> <{1}> <{6}> <{10}> <{9}> ={5}= ={0}= ={4}= ={1}= ={8}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~b~c)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
chunk {4} default/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{9}> ={0}= ={12}= ={1}= ={3}= ={8}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)
[3] ./node_modules/y.js 20 bytes {3} [built]
chunk {4} default/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{9}> ={0}= ={12}= ={1}= ={2}= ={7}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)
> ./c c
> ./c [8] ./index.js 3:0-47
[7] ./node_modules/z.js 20 bytes {4} [built]
chunk {5} default/async-g.js (async-g) 34 bytes <{0}> <{2}> <{1}> <{6}> <{10}> ={3}= [rendered]
chunk {5} default/async-g.js (async-g) 34 bytes <{0}> <{3}> <{1}> <{8}> <{10}> ={2}= [rendered]
> ./g [] 6:0-47
> ./g [] 6:0-47
[9] ./g.js 34 bytes {5} [built]
chunk {6} default/async-a.js (async-a) 156 bytes <{9}> ={0}= ={2}= ={1}= >{3}< >{5}< [rendered]
chunk {6} default/async-b.js (async-b) 72 bytes <{9}> ={0}= ={3}= ={1}= ={2}= [rendered]
> ./b [8] ./index.js 2:0-47
[4] ./b.js 72 bytes {6} {11} [built]
chunk {7} default/async-c.js (async-c) 72 bytes <{9}> ={0}= ={4}= ={1}= ={2}= [rendered]
> ./c [8] ./index.js 3:0-47
[5] ./c.js 72 bytes {7} {12} [built]
chunk {8} default/a~async-a.js (a~async-a) 156 bytes <{9}> ={0}= ={3}= ={1}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: a~async-a)
> ./a [8] ./index.js 1:0-47
[6] ./a.js + 1 modules 156 bytes {6} {10} [built]
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {7} default/async-b.js (async-b) 92 bytes <{9}> ={0}= ={2}= ={1}= [rendered]
> ./b [8] ./index.js 2:0-47
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
[4] ./b.js 72 bytes {7} {11} [built]
chunk {8} default/async-c.js (async-c) 72 bytes <{9}> ={0}= ={4}= ={1}= ={3}= [rendered]
> ./c [8] ./index.js 3:0-47
[5] ./c.js 72 bytes {8} {12} [built]
chunk {9} default/main.js (main) 147 bytes >{0}< >{2}< >{1}< >{6}< >{7}< >{4}< >{3}< >{8}< [entry] [rendered]
chunk {9} default/main.js (main) 147 bytes >{0}< >{3}< >{1}< >{2}< >{6}< >{8}< >{4}< >{7}< [entry] [rendered]
> ./ main
[8] ./index.js 147 bytes {9} [built]
chunk {10} default/a.js (a) 176 bytes ={0}= ={2}= >{3}< >{5}< [entry] [rendered]
chunk {10} default/a.js (a) 176 bytes ={0}= ={3}= >{2}< >{5}< [entry] [rendered]
> ./a a
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[6] ./a.js + 1 modules 156 bytes {6} {10} [built]
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {11} default/b.js (b) 112 bytes ={0}= ={2}= [entry] [rendered]
chunk {11} default/b.js (b) 112 bytes ={0}= ={3}= [entry] [rendered]
> ./b b
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
[4] ./b.js 72 bytes {7} {11} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[4] ./b.js 72 bytes {6} {11} [built]
chunk {12} default/c.js (c) 112 bytes ={0}= ={4}= [entry] [rendered]
> ./c c
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
[5] ./c.js 72 bytes {8} {12} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[5] ./c.js 72 bytes {7} {12} [built]
Child manual:
Entrypoint main = default/main.js
Entrypoint a = default/vendors.js default/a.js
@ -195,7 +195,7 @@ Child name-too-long:
Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be.js vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js
Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be.js vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js
Entrypoint cccccccccccccccccccccccccccccc = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be.js vendors~async-c~cccccccccccccccccccccccccccccc.js cccccccccccccccccccccccccccccc.js
chunk {0} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be) 20 bytes <{9}> ={4}= ={12}= ={2}= ={11}= ={10}= ={1}= ={3}= ={8}= ={7}= ={6}= >{3}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be)
chunk {0} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be) 20 bytes <{9}> ={4}= ={12}= ={3}= ={11}= ={10}= ={1}= ={2}= ={7}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~716093be)
> ./c cccccccccccccccccccccccccccccc
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@ -203,58 +203,58 @@ Child name-too-long:
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[2] ./node_modules/x.js 20 bytes {0} [built]
chunk {1} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~e7d53185.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~e7d53185) 20 bytes <{9}> ={0}= ={4}= ={3}= ={8}= ={2}= ={7}= ={6}= >{3}< >{5}< [rendered] split chunk (cache group: default) (name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~e7d53185)
chunk {1} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~e7d53185.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~e7d53185) 20 bytes <{9}> ={0}= ={4}= ={2}= ={7}= ={3}= ={6}= ={8}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~e7d53185)
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
chunk {2} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 20 bytes <{9}> ={0}= ={11}= ={10}= ={1}= ={7}= ={6}= >{3}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)
chunk {2} async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js (async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc) 20 bytes <{0}> <{3}> <{1}> <{8}> <{10}> <{9}> ={5}= ={0}= ={4}= ={1}= ={7}= ={3}= ={6}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
> ./b [8] ./index.js 2:0-47
[1] ./f.js 20 bytes {2} {11} {12} [built]
chunk {3} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 20 bytes <{9}> ={0}= ={11}= ={10}= ={1}= ={2}= ={6}= ={8}= >{2}< >{5}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
> ./b [8] ./index.js 2:0-47
> ./a [8] ./index.js 1:0-47
[3] ./node_modules/y.js 20 bytes {2} [built]
chunk {3} async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js (async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc) 20 bytes <{0}> <{2}> <{1}> <{6}> <{10}> <{9}> ={5}= ={0}= ={4}= ={1}= ={8}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc)
> ./g [] 6:0-47
> ./g [] 6:0-47
> ./c [8] ./index.js 3:0-47
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
chunk {4} vendors~async-c~cccccccccccccccccccccccccccccc.js (vendors~async-c~cccccccccccccccccccccccccccccc) 20 bytes <{9}> ={0}= ={12}= ={1}= ={3}= ={8}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~cccccccccccccccccccccccccccccc)
[3] ./node_modules/y.js 20 bytes {3} [built]
chunk {4} vendors~async-c~cccccccccccccccccccccccccccccc.js (vendors~async-c~cccccccccccccccccccccccccccccc) 20 bytes <{9}> ={0}= ={12}= ={1}= ={2}= ={7}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~cccccccccccccccccccccccccccccc)
> ./c cccccccccccccccccccccccccccccc
> ./c [8] ./index.js 3:0-47
[7] ./node_modules/z.js 20 bytes {4} [built]
chunk {5} async-g.js (async-g) 34 bytes <{0}> <{2}> <{1}> <{6}> <{10}> ={3}= [rendered]
chunk {5} async-g.js (async-g) 34 bytes <{0}> <{3}> <{1}> <{8}> <{10}> ={2}= [rendered]
> ./g [] 6:0-47
> ./g [] 6:0-47
[9] ./g.js 34 bytes {5} [built]
chunk {6} async-a.js (async-a) 156 bytes <{9}> ={0}= ={2}= ={1}= >{3}< >{5}< [rendered]
chunk {6} async-b.js (async-b) 72 bytes <{9}> ={0}= ={3}= ={1}= ={2}= [rendered]
> ./b [8] ./index.js 2:0-47
[4] ./b.js 72 bytes {6} {11} [built]
chunk {7} async-c.js (async-c) 72 bytes <{9}> ={0}= ={4}= ={1}= ={2}= [rendered]
> ./c [8] ./index.js 3:0-47
[5] ./c.js 72 bytes {7} {12} [built]
chunk {8} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a) 156 bytes <{9}> ={0}= ={3}= ={1}= >{2}< >{5}< [rendered] split chunk (cache group: default) (name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a)
> ./a [8] ./index.js 1:0-47
[6] ./a.js + 1 modules 156 bytes {6} {10} [built]
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {7} async-b.js (async-b) 92 bytes <{9}> ={0}= ={2}= ={1}= [rendered]
> ./b [8] ./index.js 2:0-47
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
[4] ./b.js 72 bytes {7} {11} [built]
chunk {8} async-c.js (async-c) 72 bytes <{9}> ={0}= ={4}= ={1}= ={3}= [rendered]
> ./c [8] ./index.js 3:0-47
[5] ./c.js 72 bytes {8} {12} [built]
chunk {9} main.js (main) 147 bytes >{0}< >{2}< >{1}< >{6}< >{7}< >{4}< >{3}< >{8}< [entry] [rendered]
chunk {9} main.js (main) 147 bytes >{0}< >{3}< >{1}< >{2}< >{6}< >{8}< >{4}< >{7}< [entry] [rendered]
> ./ main
[8] ./index.js 147 bytes {9} [built]
chunk {10} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) 176 bytes ={0}= ={2}= >{3}< >{5}< [entry] [rendered]
chunk {10} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) 176 bytes ={0}= ={3}= >{2}< >{5}< [entry] [rendered]
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[6] ./a.js + 1 modules 156 bytes {6} {10} [built]
[6] ./a.js + 1 modules 156 bytes {8} {10} [built]
| ./a.js 121 bytes [built]
| ./e.js 20 bytes [built]
chunk {11} bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 112 bytes ={0}= ={2}= [entry] [rendered]
chunk {11} bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 112 bytes ={0}= ={3}= [entry] [rendered]
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
[4] ./b.js 72 bytes {7} {11} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[4] ./b.js 72 bytes {6} {11} [built]
chunk {12} cccccccccccccccccccccccccccccc.js (cccccccccccccccccccccccccccccc) 112 bytes ={0}= ={4}= [entry] [rendered]
> ./c cccccccccccccccccccccccccccccc
[0] ./d.js 20 bytes {1} {10} {11} {12} [built]
[1] ./f.js 20 bytes {3} {7} {11} {12} [built]
[5] ./c.js 72 bytes {8} {12} [built]
[1] ./f.js 20 bytes {2} {11} {12} [built]
[5] ./c.js 72 bytes {7} {12} [built]