<NME> webpack.config.js
<BEF> const stats = {
	hash: false,
	timings: false,
	builtAt: false,
	assets: false,
	chunks: true,
	chunkRelations: true,
	chunkOrigins: true,
	entrypoints: true,
	modules: false
};
/** @type {import("../../../").Configuration[]} */
module.exports = [
	{
		name: "default",
		mode: "production",
		entry: {
			main: "./",
			a: "./a",
			b: "./b",
			c: "./c"
		},
		output: {
			filename: "default/[name].js"
		},
		optimization: {
			splitChunks: {
				minSize: 0 // enforce all
			}
		},
		stats
	},

	{
		name: "all-chunks",
		mode: "production",
		entry: {
			main: "./",
			a: "./a",
			b: "./b",
			c: "./c"
		},
		output: {
			filename: "all-chunks/[name].js"
		},
		optimization: {
			splitChunks: {
				minSize: 0, // enforce all,
				chunks: "all"
			}
		},
		stats
	},

	{
		name: "manual",
		mode: "production",
		entry: {
		mode: "production",
		entry: {
			main: "./",
			a: "./a",
			b: "./b",
			c: "./c",
			vendors: ["x", "y", "z"]
		},
		output: {
			filename: "default/[name].js"
			splitChunks: {
				minSize: 0, // enforce all,
				chunks: "all",
				cacheGroups: {
					default: false,
					vendors: {
						test: /[\\/]node_modules[\\/]/,
				cacheGroups: {
					default: false,
					vendors: {
						test: "vendors",
						name: "vendors",
						enforce: true
					}
	},
	{
		name: "name-too-long",
		mode: "production",
		entry: {
			main: "./",
			aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: "./a",
			bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: "./b",
			cccccccccccccccccccccccccccccc: "./c"
		},
		output: {
			filename: "name-too-long/[name].js"
		},
		optimization: {
			splitChunks: {
				minSize: 0,
				maxInitialRequests: Infinity,
				chunks: "all"
			}
		},
		stats
	},

	{
		name: "custom-chunks-filter",
		mode: "production",
		entry: {
			main: "./",
			a: "./a",
			b: "./b",
			c: "./c"
		},
		output: {
			filename: "custom-chunks-filter/[name].js"
		},
		optimization: {
			splitChunks: {
				minSize: 0,
				chunks: chunk => chunk.name !== "a"
			}
		},
		stats
	},

	{
		name: "custom-chunks-filter-in-cache-groups",
		mode: "production",
		entry: {
			main: "./",
			a: ["x", "y", "z", "./a"],
			b: ["x", "y", "z", "./b"],
			c: ["x", "y", "z", "./c"]
		},
		output: {
		mode: "production",
		entry: {
			main: "./",
			a: "./a",
			b: "./b",
			c: "./c",
			vendors: ["x", "y", "z"]
		},
		output: {
			filename: "default/[name].js"
						test: /[\\/]node_modules[\\/]/,
						name: "vendors",
						enforce: true,
						chunks: chunk => chunk.name !== "a"
					}
				}
			}
				cacheGroups: {
					default: false,
					vendors: {
						test: "vendors",
						name: "vendors",
						enforce: true,
						chunks: chunk => chunk.name !== "a"

<MSG> emit error when splitChunks.name points to existing chunk name

<DFF> @@ -59,10 +59,9 @@ module.exports = [
 		mode: "production",
 		entry: {
 			main: "./",
-			a: "./a",
-			b: "./b",
-			c: "./c",
-			vendors: ["x", "y", "z"]
+			a: ["x", "y", "z", "./a"],
+			b: ["x", "y", "z", "./b"],
+			c: ["x", "y", "z", "./c"]
 		},
 		output: {
 			filename: "default/[name].js"
@@ -76,7 +75,7 @@ module.exports = [
 				cacheGroups: {
 					default: false,
 					vendors: {
-						test: "vendors",
+						test: /[\\/]node_modules[\\/]/,
 						name: "vendors",
 						enforce: true
 					}
@@ -137,10 +136,9 @@ module.exports = [
 		mode: "production",
 		entry: {
 			main: "./",
-			a: "./a",
-			b: "./b",
-			c: "./c",
-			vendors: ["x", "y", "z"]
+			a: ["x", "y", "z", "./a"],
+			b: ["x", "y", "z", "./b"],
+			c: ["x", "y", "z", "./c"]
 		},
 		output: {
 			filename: "default/[name].js"
@@ -154,7 +152,7 @@ module.exports = [
 				cacheGroups: {
 					default: false,
 					vendors: {
-						test: "vendors",
+						test: /[\\/]node_modules[\\/]/,
 						name: "vendors",
 						enforce: true,
 						chunks: chunk => chunk.name !== "a"

{'commit': 'diff --git a/lib/Stats.js b/lib/Stats.js\nindex f9a2d56cc..d1e027d6e 100644\n--- a/lib/Stats.js\n+++ b/lib/Stats.js\n@@ -750,28 +750,12 @@ class Stats {\n \t\t\t\t\t\t\tloc: formatLocation(origin.loc),\n \t\t\t\t\t\t\trequest: origin.request\n \t\t\t\t\t\t}))\n-\t\t\t\t\t\t.sort((a, b) => {\n-\t\t\t\t\t\t\tif (\n-\t\t\t\t\t\t\t\ttypeof a.moduleId === "number" &&\n-\t\t\t\t\t\t\t\ttypeof b.moduleId !== "number"\n+\t\t\t\t\t\t.sort(\n+\t\t\t\t\t\t\tconcatComparators(\n+\t\t\t\t\t\t\t\tcompareSelect(m => m.moduleId, compareIds),\n+\t\t\t\t\t\t\t\tcompareSelect(m => m.loc, compareIds)\n \t\t\t\t\t\t\t)\n-\t\t\t\t\t\t\t\treturn 1;\n-\t\t\t\t\t\t\tif (\n-\t\t\t\t\t\t\t\ttypeof a.moduleId !== "number" &&\n-\t\t\t\t\t\t\t\ttypeof b.moduleId === "number"\n-\t\t\t\t\t\t\t)\n-\t\t\t\t\t\t\t\treturn -1;\n-\t\t\t\t\t\t\tif (\n-\t\t\t\t\t\t\t\ttypeof a.moduleId === "number" &&\n-\t\t\t\t\t\t\t\ttypeof b.moduleId === "number"\n-\t\t\t\t\t\t\t) {\n-\t\t\t\t\t\t\t\tconst diffId = a.moduleId - b.moduleId;\n-\t\t\t\t\t\t\t\tif (diffId !== 0) return diffId;\n-\t\t\t\t\t\t\t}\n-\t\t\t\t\t\t\tif (a.loc < b.loc) return -1;\n-\t\t\t\t\t\t\tif (a.loc > b.loc) return 1;\n-\t\t\t\t\t\t\treturn 0;\n-\t\t\t\t\t\t});\n+\t\t\t\t\t\t);\n \t\t\t\t}\n \t\t\t\treturn obj;\n \t\t\t});\ndiff --git a/lib/optimize/SplitChunksPlugin.js b/lib/optimize/SplitChunksPlugin.js\nindex 5eb3dd155..49107302c 100644\n--- a/lib/optimize/SplitChunksPlugin.js\n+++ b/lib/optimize/SplitChunksPlugin.js\n@@ -7,6 +7,7 @@\n \n const crypto = require("crypto");\n const { STAGE_ADVANCED } = require("../OptimizationStages");\n+const WebpackError = require("../WebpackError");\n const { isSubset } = require("../util/SetHelpers");\n const SortableSet = require("../util/SortableSet");\n const {\n@@ -307,27 +308,11 @@ module.exports = class SplitChunksPlugin {\n \t\tif (typeof test === "boolean") return test;\n \t\tif (typeof test === "string") {\n \t\t\tconst name = module.nameForCondition();\n-\t\t\tif (name && name.startsWith(test)) {\n-\t\t\t\treturn true;\n-\t\t\t}\n-\t\t\tfor (const chunk of context.chunkGraph.getModuleChunksIterable(module)) {\n-\t\t\t\tif (chunk.name && chunk.name.startsWith(test)) {\n-\t\t\t\t\treturn true;\n-\t\t\t\t}\n-\t\t\t}\n-\t\t\treturn false;\n+\t\t\treturn name && name.startsWith(test);\n \t\t}\n \t\tif (test instanceof RegExp) {\n \t\t\tconst name = module.nameForCondition();\n-\t\t\tif (name && test.test(name)) {\n-\t\t\t\treturn true;\n-\t\t\t}\n-\t\t\tfor (const chunk of context.chunkGraph.getModuleChunksIterable(module)) {\n-\t\t\t\tif (chunk.name && test.test(chunk.name)) {\n-\t\t\t\t\treturn true;\n-\t\t\t\t}\n-\t\t\t}\n-\t\t\treturn false;\n+\t\t\treturn name && test.test(name);\n \t\t}\n \t\treturn false;\n \t}\n@@ -456,6 +441,20 @@ module.exports = class SplitChunksPlugin {\n \t\t\t\t\t\treturn entry2;\n \t\t\t\t\t};\n \n+\t\t\t\t\t/**\n+\t\t\t\t\t * @typedef {Object} ChunksInfoItem\n+\t\t\t\t\t * @property {SortableSet} modules\n+\t\t\t\t\t * @property {TODO} cacheGroup\n+\t\t\t\t\t * @property {string} name\n+\t\t\t\t\t * @property {number} size\n+\t\t\t\t\t * @property {Set<Chunk>} chunks\n+\t\t\t\t\t * @property {Set<Chunk>} reuseableChunks\n+\t\t\t\t\t * @property {Set<string>} chunksKeys\n+\t\t\t\t\t */\n+\n+\t\t\t\t\t/** @type {Set<string>} */\n+\t\t\t\t\tconst alreadyValidatedNames = new Set();\n+\n \t\t\t\t\t// Map a list of chunks to a list of modules\n \t\t\t\t\t// For the key the chunk "index" is used, the value is a SortableSet of modules\n \t\t\t\t\t/** @type {Map<string, ChunksInfoItem>} */\n@@ -482,6 +481,28 @@ module.exports = class SplitChunksPlugin {\n \t\t\t\t\t\t\tselectedChunks,\n \t\t\t\t\t\t\tcacheGroup.key\n \t\t\t\t\t\t);\n+\t\t\t\t\t\t// Check if the name is ok\n+\t\t\t\t\t\tif (!alreadyValidatedNames.has(name)) {\n+\t\t\t\t\t\t\talreadyValidatedNames.add(name);\n+\t\t\t\t\t\t\tif (compilation.namedChunks.has(name)) {\n+\t\t\t\t\t\t\t\tcompilation.errors.push(\n+\t\t\t\t\t\t\t\t\tnew WebpackError(\n+\t\t\t\t\t\t\t\t\t\t"SplitChunksPlugin\\n" +\n+\t\t\t\t\t\t\t\t\t\t\t`Cache group "${\n+\t\t\t\t\t\t\t\t\t\t\t\tcacheGroup.key\n+\t\t\t\t\t\t\t\t\t\t\t}" conflicts with existing chunk.\\n` +\n+\t\t\t\t\t\t\t\t\t\t\t`Both have the same name "${name}".\\n` +\n+\t\t\t\t\t\t\t\t\t\t\t"Use a different name for the cache group.\\n" +\n+\t\t\t\t\t\t\t\t\t\t\t\'HINT: You can omit "name" to automatically create a name.\\n\' +\n+\t\t\t\t\t\t\t\t\t\t\t"BREAKING CHANGE: webpack < 5 used to allow to use the " +\n+\t\t\t\t\t\t\t\t\t\t\t"entrypoint as splitChunk. This is no longer allowed. " +\n+\t\t\t\t\t\t\t\t\t\t\t"Remove this entrypoint and add modules to cache group\'s \'test\' instead. " +\n+\t\t\t\t\t\t\t\t\t\t\t"If you need modules to be evaluated on startup, add them to the existing entrypoints (make them arrays). " +\n+\t\t\t\t\t\t\t\t\t\t\t"See migration guide of more info."\n+\t\t\t\t\t\t\t\t\t)\n+\t\t\t\t\t\t\t\t);\n+\t\t\t\t\t\t\t}\n+\t\t\t\t\t\t}\n \t\t\t\t\t\t// Create key for maps\n \t\t\t\t\t\t// When it has a name we use the name as key\n \t\t\t\t\t\t// Elsewise we create the key from chunks and cache group key\ndiff --git a/test/__snapshots__/StatsTestCases.test.js.snap b/test/__snapshots__/StatsTestCases.test.js.snap\nindex ae29e1322..4827cf644 100644\n--- a/test/__snapshots__/StatsTestCases.test.js.snap\n+++ b/test/__snapshots__/StatsTestCases.test.js.snap\n@@ -250,10 +250,10 @@ Child default:\n         > ./b [0] ./index.js 2:0-47\n      [4] ./b.js 72 bytes {2} {7} [built]\n     chunk    {8} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{1}> <{3}> <{5}> <{6}> <{12}> ={1}= ={5}= ={6}= ={7}= ={9}= ={10}= ={11}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)\n-        > ./g [] 6:0-47\n-        > ./g [] 6:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./g [] 6:0-47\n+        > ./g [] 6:0-47\n      [5] ./f.js 20 bytes {2} {4} {8} [built]\n     chunk    {9} default/async-c.js (async-c) 72 bytes <{0}> ={1}= ={5}= ={8}= ={10}= [rendered]\n         > ./c [0] ./index.js 3:0-47\n@@ -337,26 +337,26 @@ Child multiple-vendors:\n         > ./ main\n      [0] ./index.js 147 bytes {0} [built]\n     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 <{0}> ={2}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)\n-        > ./a a\n-        > ./b b\n-        > ./c c\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [1] ./d.js 20 bytes {1} [built]\n-    chunk    {2} multiple-vendors/libs-x.js (libs-x) 20 bytes <{0}> ={1}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: libs) (name: libs-x)\n         > ./a a\n         > ./b b\n         > ./c c\n+     [1] ./d.js 20 bytes {1} [built]\n+    chunk    {2} multiple-vendors/libs-x.js (libs-x) 20 bytes <{0}> ={1}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: libs) (name: libs-x)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [2] ./node_modules/x.js 20 bytes {2} [built]\n-    chunk    {3} multiple-vendors/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{0}> ={1}= ={2}= ={4}= ={5}= ={6}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)\n         > ./a a\n         > ./b b\n+        > ./c c\n+     [2] ./node_modules/x.js 20 bytes {2} [built]\n+    chunk    {3} multiple-vendors/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{0}> ={1}= ={2}= ={4}= ={5}= ={6}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n+        > ./a a\n+        > ./b b\n      [3] ./node_modules/y.js 20 bytes {3} [built]\n     chunk    {4} multiple-vendors/async-b.js (async-b) 72 bytes <{0}> ={1}= ={2}= ={3}= ={6}= [rendered]\n         > ./b [0] ./index.js 2:0-47\n@@ -366,10 +366,10 @@ Child multiple-vendors:\n      [4] ./b.js 72 bytes {4} {5} [built]\n      [5] ./f.js 20 bytes {5} {6} {7} [built]\n     chunk    {6} multiple-vendors/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{1}> <{2}> <{3}> <{11}> <{12}> ={1}= ={2}= ={3}= ={4}= ={8}= ={9}= ={10}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)\n-        > ./g [] 6:0-47\n-        > ./g [] 6:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./g [] 6:0-47\n+        > ./g [] 6:0-47\n      [5] ./f.js 20 bytes {5} {6} {7} [built]\n     chunk    {7} multiple-vendors/c.js (c) 92 bytes ={1}= ={2}= ={9}= [entry] [rendered]\n         > ./c c\n@@ -379,8 +379,8 @@ Child multiple-vendors:\n         > ./c [0] ./index.js 3:0-47\n      [6] ./c.js 72 bytes {7} {8} [built]\n     chunk    {9} multiple-vendors/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{0}> ={1}= ={2}= ={6}= ={7}= ={8}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)\n-        > ./c c\n         > ./c [0] ./index.js 3:0-47\n+        > ./c c\n      [7] ./node_modules/z.js 20 bytes {9} [built]\n     chunk   {10} multiple-vendors/async-g.js (async-g) 34 bytes <{1}> <{2}> <{3}> <{11}> <{12}> ={6}= [rendered]\n         > ./g [] 6:0-47\n@@ -405,26 +405,26 @@ Child all:\n         > ./ main\n      [0] ./index.js 147 bytes {0} [built]\n     chunk    {1} all/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{0}> ={2}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)\n-        > ./a a\n-        > ./b b\n-        > ./c c\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [1] ./d.js 20 bytes {1} [built]\n-    chunk    {2} all/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{0}> ={1}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~async-c~b~c)\n         > ./a a\n         > ./b b\n         > ./c c\n+     [1] ./d.js 20 bytes {1} [built]\n+    chunk    {2} all/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{0}> ={1}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~async-c~b~c)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [2] ./node_modules/x.js 20 bytes {2} [built]\n-    chunk    {3} all/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{0}> ={1}= ={2}= ={4}= ={5}= ={6}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)\n         > ./a a\n         > ./b b\n+        > ./c c\n+     [2] ./node_modules/x.js 20 bytes {2} [built]\n+    chunk    {3} all/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{0}> ={1}= ={2}= ={4}= ={5}= ={6}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~a~async-a~async-b~b)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n+        > ./a a\n+        > ./b b\n      [3] ./node_modules/y.js 20 bytes {3} [built]\n     chunk    {4} all/async-b.js (async-b) 72 bytes <{0}> ={1}= ={2}= ={3}= ={6}= [rendered]\n         > ./b [0] ./index.js 2:0-47\n@@ -434,10 +434,10 @@ Child all:\n      [4] ./b.js 72 bytes {4} {5} [built]\n      [5] ./f.js 20 bytes {5} {6} {7} [built]\n     chunk    {6} all/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{1}> <{2}> <{3}> <{11}> <{12}> ={1}= ={2}= ={3}= ={4}= ={8}= ={9}= ={10}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)\n-        > ./g [] 6:0-47\n-        > ./g [] 6:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./g [] 6:0-47\n+        > ./g [] 6:0-47\n      [5] ./f.js 20 bytes {5} {6} {7} [built]\n     chunk    {7} all/c.js (c) 92 bytes ={1}= ={2}= ={9}= [entry] [rendered]\n         > ./c c\n@@ -447,8 +447,8 @@ Child all:\n         > ./c [0] ./index.js 3:0-47\n      [6] ./c.js 72 bytes {7} {8} [built]\n     chunk    {9} all/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{0}> ={1}= ={2}= ={6}= ={7}= ={8}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~c)\n-        > ./c c\n         > ./c [0] ./index.js 3:0-47\n+        > ./c c\n      [7] ./node_modules/z.js 20 bytes {9} [built]\n     chunk   {10} all/async-g.js (async-g) 34 bytes <{1}> <{2}> <{3}> <{11}> <{12}> ={6}= [rendered]\n         > ./g [] 6:0-47\n@@ -1554,9 +1554,9 @@ chunk    {3} chunk.js (chunk) 0 bytes <{2}> <{7}> [rendered]\n  [4] ./modules/d.js 0 bytes {2} {3} [built]\n  [7] ./modules/c.js 0 bytes {3} {7} [built]\n chunk    {4} cir1.js (cir1) 81 bytes <{0}> <{5}> >{6}< [rendered]\n-    > [0] ./index.js 13:0-54\n     > [6] ./circular2.js 1:0-79\n     > [6] ./circular2.js 1:0-79\n+    > [0] ./index.js 13:0-54\n  [5] ./circular1.js 81 bytes {4} [built]\n chunk    {5} cir2.js (cir2) 81 bytes <{0}> >{4}< [rendered]\n     > [0] ./index.js 14:0-54\n@@ -2368,10 +2368,10 @@ exports[`StatsTestCases should print correct stats for split-chunks 1`] = `\n         > ./b [0] ./index.js 2:0-47\n      [4] ./b.js 72 bytes {2} {7} [built]\n     chunk    {8} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{1}> <{3}> <{5}> <{6}> <{12}> ={1}= ={5}= ={6}= ={7}= ={9}= ={10}= ={11}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)\n-        > ./g [] 6:0-47\n-        > ./g [] 6:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./g [] 6:0-47\n+        > ./g [] 6:0-47\n      [5] ./f.js 20 bytes {2} {4} {8} [built]\n     chunk    {9} default/async-c.js (async-c) 72 bytes <{0}> ={1}= ={5}= ={8}= ={10}= [rendered]\n         > ./c [0] ./index.js 3:0-47\n@@ -2397,26 +2397,26 @@ Child all-chunks:\n         > ./ main\n      [0] ./index.js 147 bytes {0} [built]\n     chunk    {1} default/a~async-a~async-b~async-c~b~c.js (a~async-a~async-b~async-c~b~c) 20 bytes <{0}> ={2}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: default) (name: a~async-a~async-b~async-c~b~c)\n-        > ./a a\n-        > ./b b\n-        > ./c c\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [1] ./d.js 20 bytes {1} [built]\n-    chunk    {2} default/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{0}> ={1}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~a~async-a~async-b~async-c~b~c)\n         > ./a a\n         > ./b b\n         > ./c c\n+     [1] ./d.js 20 bytes {1} [built]\n+    chunk    {2} default/vendors~a~async-a~async-b~async-c~b~c.js (vendors~a~async-a~async-b~async-c~b~c) 20 bytes <{0}> ={1}= ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~a~async-a~async-b~async-c~b~c)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [2] ./node_modules/x.js 20 bytes {2} [built]\n-    chunk    {3} default/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{0}> ={1}= ={2}= ={4}= ={5}= ={6}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~a~async-a~async-b~b)\n         > ./a a\n         > ./b b\n+        > ./c c\n+     [2] ./node_modules/x.js 20 bytes {2} [built]\n+    chunk    {3} default/vendors~a~async-a~async-b~b.js (vendors~a~async-a~async-b~b) 20 bytes <{0}> ={1}= ={2}= ={4}= ={5}= ={6}= ={11}= ={12}= >{6}< >{10}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~a~async-a~async-b~b)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n+        > ./a a\n+        > ./b b\n      [3] ./node_modules/y.js 20 bytes {3} [built]\n     chunk    {4} default/async-b.js (async-b) 72 bytes <{0}> ={1}= ={2}= ={3}= ={6}= [rendered]\n         > ./b [0] ./index.js 2:0-47\n@@ -2426,10 +2426,10 @@ Child all-chunks:\n      [4] ./b.js 72 bytes {4} {5} [built]\n      [5] ./f.js 20 bytes {5} {6} {7} [built]\n     chunk    {6} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{1}> <{2}> <{3}> <{11}> <{12}> ={1}= ={2}= ={3}= ={4}= ={8}= ={9}= ={10}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)\n-        > ./g [] 6:0-47\n-        > ./g [] 6:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./g [] 6:0-47\n+        > ./g [] 6:0-47\n      [5] ./f.js 20 bytes {5} {6} {7} [built]\n     chunk    {7} default/c.js (c) 92 bytes ={1}= ={2}= ={9}= [entry] [rendered]\n         > ./c c\n@@ -2439,8 +2439,8 @@ Child all-chunks:\n         > ./c [0] ./index.js 3:0-47\n      [6] ./c.js 72 bytes {7} {8} [built]\n     chunk    {9} default/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{0}> ={1}= ={2}= ={6}= ={7}= ={8}= [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~async-c~c)\n-        > ./c c\n         > ./c [0] ./index.js 3:0-47\n+        > ./c c\n      [7] ./node_modules/z.js 20 bytes {9} [built]\n     chunk   {10} default/async-g.js (async-g) 34 bytes <{1}> <{2}> <{3}> <{11}> <{12}> ={6}= [rendered]\n         > ./g [] 6:0-47\n@@ -2461,55 +2461,73 @@ Child manual:\n     Entrypoint a = default/vendors.js default/a.js\n     Entrypoint b = default/vendors.js default/b.js\n     Entrypoint c = default/vendors.js default/c.js\n-    chunk    {0} default/main.js (main) 147 bytes >{2}< >{4}< >{6}< >{7}< [entry] [rendered]\n+    chunk    {0} default/main.js (main) 147 bytes >{1}< >{3}< >{5}< >{7}< [entry] [rendered]\n         > ./ main\n      [0] ./index.js 147 bytes {0} [built]\n-    chunk    {1} default/b.js (b) 112 bytes ={7}= [entry] [rendered]\n+    chunk    {1} default/vendors.js (vendors) 60 bytes <{0}> ={2}= ={3}= ={4}= ={5}= ={6}= ={7}= >{8}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors)\n+        > ./a [0] ./index.js 1:0-47\n+        > ./b [0] ./index.js 2:0-47\n+        > ./c [0] ./index.js 3:0-47\n+        > ./a a\n+        > x a\n+        > z a\n+        > y a\n+        > z b\n+        > y b\n+        > x b\n         > ./b b\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [4] ./b.js 72 bytes {1} {2} [built]\n-     [5] ./f.js 20 bytes {1} {2} {3} {4} {8} [built]\n-    chunk    {2} default/async-b.js (async-b) 112 bytes <{0}> ={7}= [rendered]\n+        > x c\n+        > y c\n+        > z c\n+        > ./c c\n+     [1] ./node_modules/x.js 20 bytes {1} [built]\n+     [2] ./node_modules/y.js 20 bytes {1} [built]\n+     [3] ./node_modules/z.js 20 bytes {1} [built]\n+    chunk    {2} default/b.js (b) 112 bytes ={1}= [entry] [rendered]\n+        > x b\n+        > y b\n+        > z b\n+        > ./b b\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [5] ./b.js 72 bytes {2} {3} [built]\n+     [6] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n+    chunk    {3} default/async-b.js (async-b) 112 bytes <{0}> ={1}= [rendered]\n         > ./b [0] ./index.js 2:0-47\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [4] ./b.js 72 bytes {1} {2} [built]\n-     [5] ./f.js 20 bytes {1} {2} {3} {4} {8} [built]\n-    chunk    {3} default/c.js (c) 112 bytes ={7}= [entry] [rendered]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [5] ./b.js 72 bytes {2} {3} [built]\n+     [6] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n+    chunk    {4} default/c.js (c) 112 bytes ={1}= [entry] [rendered]\n+        > x c\n+        > y c\n+        > z c\n         > ./c c\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [5] ./f.js 20 bytes {1} {2} {3} {4} {8} [built]\n-     [6] ./c.js 72 bytes {3} {4} [built]\n-    chunk    {4} default/async-c.js (async-c) 112 bytes <{0}> ={7}= [rendered]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [6] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n+     [7] ./c.js 72 bytes {4} {5} [built]\n+    chunk    {5} default/async-c.js (async-c) 112 bytes <{0}> ={1}= [rendered]\n         > ./c [0] ./index.js 3:0-47\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [5] ./f.js 20 bytes {1} {2} {3} {4} {8} [built]\n-     [6] ./c.js 72 bytes {3} {4} [built]\n-    chunk    {5} default/a.js (a) 176 bytes ={7}= >{8}< [entry] [rendered]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [6] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n+     [7] ./c.js 72 bytes {4} {5} [built]\n+    chunk    {6} default/a.js (a) 176 bytes ={1}= >{8}< [entry] [rendered]\n+        > x a\n+        > y a\n+        > z a\n         > ./a a\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [9] ./a.js + 1 modules 156 bytes {5} {6} [built]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [9] ./a.js + 1 modules 156 bytes {6} {7} [built]\n          | ./e.js 20 bytes [built]\n          | ./a.js 121 bytes [built]\n-    chunk    {6} default/async-a.js (async-a) 176 bytes <{0}> ={7}= >{8}< [rendered]\n+    chunk    {7} default/async-a.js (async-a) 176 bytes <{0}> ={1}= >{8}< [rendered]\n         > ./a [0] ./index.js 1:0-47\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [9] ./a.js + 1 modules 156 bytes {5} {6} [built]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [9] ./a.js + 1 modules 156 bytes {6} {7} [built]\n          | ./e.js 20 bytes [built]\n          | ./a.js 121 bytes [built]\n-    chunk    {7} default/vendors.js (vendors) 60 bytes <{0}> ={1}= ={2}= ={3}= ={4}= ={5}= ={6}= >{8}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors)\n-        > ./a a\n-        > ./b b\n-        > ./c c\n-        > ./a [0] ./index.js 1:0-47\n-        > ./b [0] ./index.js 2:0-47\n-        > ./c [0] ./index.js 3:0-47\n-     [2] ./node_modules/x.js 20 bytes {7} [built]\n-     [3] ./node_modules/y.js 20 bytes {7} [built]\n-     [7] ./node_modules/z.js 20 bytes {7} [built]\n-    chunk    {8} default/async-g.js (async-g) 54 bytes <{5}> <{6}> <{7}> [rendered]\n+    chunk    {8} default/async-g.js (async-g) 54 bytes <{1}> <{6}> <{7}> [rendered]\n         > ./g [] 6:0-47\n         > ./g [] 6:0-47\n-     [5] ./f.js 20 bytes {1} {2} {3} {4} {8} [built]\n+     [6] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n      [8] ./g.js 34 bytes {8} [built]\n Child name-too-long:\n     Entrypoint main = main.js\n@@ -2526,54 +2544,54 @@ Child name-too-long:\n         > ./ main\n      [0] ./index.js 147 bytes {3} [built]\n     chunk    {4} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793) 20 bytes <{3}> ={0}= ={1}= ={2}= ={5}= ={6}= ={7}= ={8}= ={9}= ={10}= ={12}= >{8}< >{11}< [initial] [rendered] split chunk (cache group: default) (name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793)\n-        > ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n-        > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n-        > ./c cccccccccccccccccccccccccccccc\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [1] ./d.js 20 bytes {4} [built]\n-    chunk    {5} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f) 20 bytes <{3}> ={0}= ={1}= ={2}= ={4}= ={6}= ={7}= ={8}= ={9}= ={10}= ={12}= >{8}< >{11}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f)\n         > ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n         > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n         > ./c cccccccccccccccccccccccccccccc\n+     [1] ./d.js 20 bytes {4} [built]\n+    chunk    {5} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f) 20 bytes <{3}> ={0}= ={1}= ={2}= ={4}= ={6}= ={7}= ={8}= ={9}= ={10}= ={12}= >{8}< >{11}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n-     [2] ./node_modules/x.js 20 bytes {5} [built]\n-    chunk    {6} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 20 bytes <{3}> ={0}= ={2}= ={4}= ={5}= ={7}= ={8}= ={12}= >{8}< >{11}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)\n         > ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n         > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n+        > ./c cccccccccccccccccccccccccccccc\n+     [2] ./node_modules/x.js 20 bytes {5} [built]\n+    chunk    {6} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 20 bytes <{3}> ={0}= ={2}= ={4}= ={5}= ={7}= ={8}= ={12}= >{8}< >{11}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n+        > ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n+        > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n      [3] ./node_modules/y.js 20 bytes {6} [built]\n     chunk    {7} async-b.js (async-b) 72 bytes <{3}> ={0}= ={4}= ={5}= ={6}= ={8}= [initial] [rendered] reused as split chunk (cache group: default)\n-        > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n         > ./b [0] ./index.js 2:0-47\n+        > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n      [4] ./b.js 72 bytes {7} [built]\n     chunk    {8} async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js (async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc) 20 bytes <{2}> <{3}> <{4}> <{5}> <{6}> <{12}> ={0}= ={1}= ={4}= ={5}= ={6}= ={7}= ={9}= ={10}= ={11}= [initial] [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc)\n+        > ./b [0] ./index.js 2:0-47\n+        > ./c [0] ./index.js 3:0-47\n         > ./g [] 6:0-47\n         > ./g [] 6:0-47\n         > ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n         > ./c cccccccccccccccccccccccccccccc\n-        > ./b [0] ./index.js 2:0-47\n-        > ./c [0] ./index.js 3:0-47\n      [5] ./f.js 20 bytes {8} [built]\n     chunk    {9} async-c.js (async-c) 72 bytes <{3}> ={1}= ={4}= ={5}= ={8}= ={10}= [initial] [rendered] reused as split chunk (cache group: default)\n-        > ./c cccccccccccccccccccccccccccccc\n         > ./c [0] ./index.js 3:0-47\n+        > ./c cccccccccccccccccccccccccccccc\n      [6] ./c.js 72 bytes {9} [built]\n     chunk   {10} vendors~async-c~cccccccccccccccccccccccccccccc.js (vendors~async-c~cccccccccccccccccccccccccccccc) 20 bytes <{3}> ={1}= ={4}= ={5}= ={8}= ={9}= [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~async-c~cccccccccccccccccccccccccccccc)\n-        > ./c cccccccccccccccccccccccccccccc\n         > ./c [0] ./index.js 3:0-47\n+        > ./c cccccccccccccccccccccccccccccc\n      [7] ./node_modules/z.js 20 bytes {10} [built]\n     chunk   {11} async-g.js (async-g) 34 bytes <{2}> <{4}> <{5}> <{6}> <{12}> ={8}= [rendered]\n         > ./g [] 6:0-47\n         > ./g [] 6:0-47\n      [8] ./g.js 34 bytes {11} [built]\n     chunk   {12} async-a.js (async-a) 156 bytes <{3}> ={2}= ={4}= ={5}= ={6}= >{8}< >{11}< [initial] [rendered] reused as split chunk (cache group: default)\n-        > ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n         > ./a [0] ./index.js 1:0-47\n+        > ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n      [9] ./a.js + 1 modules 156 bytes {12} [built]\n          | ./e.js 20 bytes [built]\n          | ./a.js 121 bytes [built]\n@@ -2586,11 +2604,11 @@ Child custom-chunks-filter:\n         > ./ main\n      [0] ./index.js 147 bytes {0} [built]\n     chunk    {1} default/async-a~async-b~async-c~b~c.js (async-a~async-b~async-c~b~c) 20 bytes <{0}> ={3}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={10}= ={12}= >{7}< >{11}< [initial] [rendered] split chunk (cache group: default) (name: async-a~async-b~async-c~b~c)\n-        > ./b b\n-        > ./c c\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./b b\n+        > ./c c\n      [1] ./d.js 20 bytes {1} {2} [built]\n     chunk    {2} default/a.js (a) 216 bytes >{7}< >{11}< [entry] [rendered]\n         > ./a a\n@@ -2601,16 +2619,16 @@ Child custom-chunks-filter:\n          | ./e.js 20 bytes [built]\n          | ./a.js 121 bytes [built]\n     chunk    {3} default/vendors~async-a~async-b~async-c~b~c.js (vendors~async-a~async-b~async-c~b~c) 20 bytes <{0}> ={1}= ={4}= ={5}= ={6}= ={7}= ={8}= ={9}= ={10}= ={12}= >{7}< >{11}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~async-a~async-b~async-c~b~c)\n-        > ./b b\n-        > ./c c\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./b b\n+        > ./c c\n      [2] ./node_modules/x.js 20 bytes {2} {3} [built]\n     chunk    {4} default/vendors~async-a~async-b~b.js (vendors~async-a~async-b~b) 20 bytes <{0}> ={1}= ={3}= ={5}= ={6}= ={7}= ={12}= >{7}< >{11}< [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~async-a~async-b~b)\n-        > ./b b\n         > ./a [0] ./index.js 1:0-47\n         > ./b [0] ./index.js 2:0-47\n+        > ./b b\n      [3] ./node_modules/y.js 20 bytes {2} {4} [built]\n     chunk    {5} default/async-b.js (async-b) 72 bytes <{0}> ={1}= ={3}= ={4}= ={7}= [rendered]\n         > ./b [0] ./index.js 2:0-47\n@@ -2620,10 +2638,10 @@ Child custom-chunks-filter:\n      [4] ./b.js 72 bytes {5} {6} [built]\n      [5] ./f.js 20 bytes {6} {7} {8} [built]\n     chunk    {7} default/async-b~async-c~async-g.js (async-b~async-c~async-g) 20 bytes <{0}> <{1}> <{2}> <{3}> <{4}> <{12}> ={1}= ={3}= ={4}= ={5}= ={9}= ={10}= ={11}= [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g)\n-        > ./g [] 6:0-47\n-        > ./g [] 6:0-47\n         > ./b [0] ./index.js 2:0-47\n         > ./c [0] ./index.js 3:0-47\n+        > ./g [] 6:0-47\n+        > ./g [] 6:0-47\n      [5] ./f.js 20 bytes {6} {7} {8} [built]\n     chunk    {8} default/c.js (c) 92 bytes ={1}= ={3}= ={10}= [entry] [rendered]\n         > ./c c\n@@ -2633,8 +2651,8 @@ Child custom-chunks-filter:\n         > ./c [0] ./index.js 3:0-47\n      [6] ./c.js 72 bytes {8} {9} [built]\n     chunk   {10} default/vendors~async-c~c.js (vendors~async-c~c) 20 bytes <{0}> ={1}= ={3}= ={7}= ={8}= ={9}= [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~async-c~c)\n-        > ./c c\n         > ./c [0] ./index.js 3:0-47\n+        > ./c c\n      [7] ./node_modules/z.js 20 bytes {10} [built]\n     chunk   {11} default/async-g.js (async-g) 34 bytes <{1}> <{2}> <{3}> <{4}> <{12}> ={7}= [rendered]\n         > ./g [] 6:0-47\n@@ -2650,56 +2668,72 @@ Child custom-chunks-filter-in-cache-groups:\n     Entrypoint a = default/a.js\n     Entrypoint b = default/vendors.js default/b.js\n     Entrypoint c = default/vendors.js default/c.js\n-    chunk    {0} default/main.js (main) 147 bytes >{3}< >{5}< >{6}< >{7}< [entry] [rendered]\n+    chunk    {0} default/main.js (main) 147 bytes >{1}< >{4}< >{6}< >{7}< [entry] [rendered]\n         > ./ main\n      [0] ./index.js 147 bytes {0} [built]\n-    chunk    {1} default/a.js (a) 216 bytes >{8}< [entry] [rendered]\n+    chunk    {1} default/vendors.js (vendors) 60 bytes <{0}> ={3}= ={4}= ={5}= ={6}= ={7}= >{8}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors)\n+        > ./a [0] ./index.js 1:0-47\n+        > ./b [0] ./index.js 2:0-47\n+        > ./c [0] ./index.js 3:0-47\n+        > ./b b\n+        > x b\n+        > y b\n+        > z b\n+        > ./c c\n+        > z c\n+        > x c\n+        > y c\n+     [1] ./node_modules/x.js 20 bytes {1} {2} [built]\n+     [2] ./node_modules/y.js 20 bytes {1} {2} [built]\n+     [3] ./node_modules/z.js 20 bytes {1} {2} [built]\n+    chunk    {2} default/a.js (a) 236 bytes >{8}< [entry] [rendered]\n+        > x a\n+        > y a\n+        > z a\n         > ./a a\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [2] ./node_modules/x.js 20 bytes {1} {7} [built]\n-     [3] ./node_modules/y.js 20 bytes {1} {7} [built]\n-     [9] ./a.js + 1 modules 156 bytes {1} {6} [built]\n+     [1] ./node_modules/x.js 20 bytes {1} {2} [built]\n+     [2] ./node_modules/y.js 20 bytes {1} {2} [built]\n+     [3] ./node_modules/z.js 20 bytes {1} {2} [built]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [9] ./a.js + 1 modules 156 bytes {2} {7} [built]\n          | ./e.js 20 bytes [built]\n          | ./a.js 121 bytes [built]\n-    chunk    {2} default/b.js (b) 112 bytes ={7}= [entry] [rendered]\n+    chunk    {3} default/b.js (b) 112 bytes ={1}= [entry] [rendered]\n+        > x b\n+        > y b\n+        > z b\n         > ./b b\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [4] ./b.js 72 bytes {2} {3} [built]\n-     [5] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n-    chunk    {3} default/async-b.js (async-b) 112 bytes <{0}> ={7}= [rendered]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [5] ./b.js 72 bytes {3} {4} [built]\n+     [6] ./f.js 20 bytes {3} {4} {5} {6} {8} [built]\n+    chunk    {4} default/async-b.js (async-b) 112 bytes <{0}> ={1}= [rendered]\n         > ./b [0] ./index.js 2:0-47\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [4] ./b.js 72 bytes {2} {3} [built]\n-     [5] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n-    chunk    {4} default/c.js (c) 112 bytes ={7}= [entry] [rendered]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [5] ./b.js 72 bytes {3} {4} [built]\n+     [6] ./f.js 20 bytes {3} {4} {5} {6} {8} [built]\n+    chunk    {5} default/c.js (c) 112 bytes ={1}= [entry] [rendered]\n+        > x c\n+        > y c\n+        > z c\n         > ./c c\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [5] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n-     [6] ./c.js 72 bytes {4} {5} [built]\n-    chunk    {5} default/async-c.js (async-c) 112 bytes <{0}> ={7}= [rendered]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [6] ./f.js 20 bytes {3} {4} {5} {6} {8} [built]\n+     [7] ./c.js 72 bytes {5} {6} [built]\n+    chunk    {6} default/async-c.js (async-c) 112 bytes <{0}> ={1}= [rendered]\n         > ./c [0] ./index.js 3:0-47\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [5] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n-     [6] ./c.js 72 bytes {4} {5} [built]\n-    chunk    {6} default/async-a.js (async-a) 176 bytes <{0}> ={7}= >{8}< [rendered]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [6] ./f.js 20 bytes {3} {4} {5} {6} {8} [built]\n+     [7] ./c.js 72 bytes {5} {6} [built]\n+    chunk    {7} default/async-a.js (async-a) 176 bytes <{0}> ={1}= >{8}< [rendered]\n         > ./a [0] ./index.js 1:0-47\n-     [1] ./d.js 20 bytes {1} {2} {3} {4} {5} {6} [built]\n-     [9] ./a.js + 1 modules 156 bytes {1} {6} [built]\n+     [4] ./d.js 20 bytes {2} {3} {4} {5} {6} {7} [built]\n+     [9] ./a.js + 1 modules 156 bytes {2} {7} [built]\n          | ./e.js 20 bytes [built]\n          | ./a.js 121 bytes [built]\n-    chunk    {7} default/vendors.js (vendors) 60 bytes <{0}> ={2}= ={3}= ={4}= ={5}= ={6}= >{8}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors)\n-        > ./b b\n-        > ./c c\n-        > ./a [0] ./index.js 1:0-47\n-        > ./b [0] ./index.js 2:0-47\n-        > ./c [0] ./index.js 3:0-47\n-     [2] ./node_modules/x.js 20 bytes {1} {7} [built]\n-     [3] ./node_modules/y.js 20 bytes {1} {7} [built]\n-     [7] ./node_modules/z.js 20 bytes {7} [built]\n-    chunk    {8} default/async-g.js (async-g) 54 bytes <{1}> <{6}> <{7}> [rendered]\n+    chunk    {8} default/async-g.js (async-g) 54 bytes <{1}> <{2}> <{7}> [rendered]\n         > ./g [] 6:0-47\n         > ./g [] 6:0-47\n-     [5] ./f.js 20 bytes {2} {3} {4} {5} {8} [built]\n+     [6] ./f.js 20 bytes {3} {4} {5} {6} {8} [built]\n      [8] ./g.js 34 bytes {8} [built]"\n `;\n \n@@ -2828,8 +2862,8 @@ chunk    {0} a.js (a) 12 bytes ={1}= [entry] [rendered]\n     > ./a a\n  [0] ./a.js 12 bytes {0} [built]\n chunk    {1} vendors~a~c.js (vendors~a~c) 20 bytes <{2}> ={0}= ={3}= [initial] [rendered] split chunk (cache group: defaultVendors) (name: vendors~a~c)\n-    > ./a a\n     > ./c [2] ./b.js 1:0-41\n+    > ./a a\n  [1] ./node_modules/x.js 20 bytes {1} [built]\n chunk    {2} b.js (b) 43 bytes >{1}< >{3}< [entry] [rendered]\n     > ./b b\ndiff --git a/test/configCases/split-chunks/entry-point-error/errors.js b/test/configCases/split-chunks/entry-point-error/errors.js\nnew file mode 100644\nindex 000000000..389c2d3aa\n--- /dev/null\n+++ b/test/configCases/split-chunks/entry-point-error/errors.js\n@@ -0,0 +1,3 @@\n+module.exports = [\n+\t[/SplitChunksPlugin/, /Both have the same name "vendors"/]\n+];\ndiff --git a/test/configCases/split-chunks/entry-point-error/index.js b/test/configCases/split-chunks/entry-point-error/index.js\nnew file mode 100644\nindex 000000000..99cc8b0ac\n--- /dev/null\n+++ b/test/configCases/split-chunks/entry-point-error/index.js\n@@ -0,0 +1,3 @@\n+import "./module";\n+\n+it("should emit correct errors", () => {})\ndiff --git a/test/configCases/split-chunks/entry-point-error/module.js b/test/configCases/split-chunks/entry-point-error/module.js\nnew file mode 100644\nindex 000000000..503bca78c\n--- /dev/null\n+++ b/test/configCases/split-chunks/entry-point-error/module.js\n@@ -0,0 +1 @@\n+export default "module";\ndiff --git a/test/configCases/split-chunks/entry-point-error/test.config.js b/test/configCases/split-chunks/entry-point-error/test.config.js\nnew file mode 100644\nindex 000000000..5fce65555\n--- /dev/null\n+++ b/test/configCases/split-chunks/entry-point-error/test.config.js\n@@ -0,0 +1,5 @@\n+module.exports = {\n+\tfindBundle: function(i, options) {\n+\t\treturn ["vendors.js", "main.js"];\n+\t}\n+};\ndiff --git a/test/configCases/split-chunks/entry-point-error/webpack.config.js b/test/configCases/split-chunks/entry-point-error/webpack.config.js\nnew file mode 100644\nindex 000000000..fb8410004\n--- /dev/null\n+++ b/test/configCases/split-chunks/entry-point-error/webpack.config.js\n@@ -0,0 +1,23 @@\n+module.exports = {\n+\tentry: {\n+\t\tvendors: ["./module"],\n+\t\tmain: "./index"\n+\t},\n+\ttarget: "web",\n+\toutput: {\n+\t\tfilename: "[name].js"\n+\t},\n+\toptimization: {\n+\t\tnoEmitOnErrors: false,\n+\t\tsplitChunks: {\n+\t\t\tcacheGroups: {\n+\t\t\t\tvendors: {\n+\t\t\t\t\ttest: /module/,\n+\t\t\t\t\tchunks: "all",\n+\t\t\t\t\tname: "vendors",\n+\t\t\t\t\tenforce: true\n+\t\t\t\t}\n+\t\t\t}\n+\t\t}\n+\t}\n+};\ndiff --git a/test/statsCases/split-chunks/webpack.config.js b/test/statsCases/split-chunks/webpack.config.js\nindex b090b9b7d..7d3fcccec 100644\n--- a/test/statsCases/split-chunks/webpack.config.js\n+++ b/test/statsCases/split-chunks/webpack.config.js\n@@ -59,10 +59,9 @@ module.exports = [\n \t\tmode: "production",\n \t\tentry: {\n \t\t\tmain: "./",\n-\t\t\ta: "./a",\n-\t\t\tb: "./b",\n-\t\t\tc: "./c",\n-\t\t\tvendors: ["x", "y", "z"]\n+\t\t\ta: ["x", "y", "z", "./a"],\n+\t\t\tb: ["x", "y", "z", "./b"],\n+\t\t\tc: ["x", "y", "z", "./c"]\n \t\t},\n \t\toutput: {\n \t\t\tfilename: "default/[name].js"\n@@ -76,7 +75,7 @@ module.exports = [\n \t\t\t\tcacheGroups: {\n \t\t\t\t\tdefault: false,\n \t\t\t\t\tvendors: {\n-\t\t\t\t\t\ttest: "vendors",\n+\t\t\t\t\t\ttest: /[\\\\/]node_modules[\\\\/]/,\n \t\t\t\t\t\tname: "vendors",\n \t\t\t\t\t\tenforce: true\n \t\t\t\t\t}\n@@ -137,10 +136,9 @@ module.exports = [\n \t\tmode: "production",\n \t\tentry: {\n \t\t\tmain: "./",\n-\t\t\ta: "./a",\n-\t\t\tb: "./b",\n-\t\t\tc: "./c",\n-\t\t\tvendors: ["x", "y", "z"]\n+\t\t\ta: ["x", "y", "z", "./a"],\n+\t\t\tb: ["x", "y", "z", "./b"],\n+\t\t\tc: ["x", "y", "z", "./c"]\n \t\t},\n \t\toutput: {\n \t\t\tfilename: "default/[name].js"\n@@ -154,7 +152,7 @@ module.exports = [\n \t\t\t\tcacheGroups: {\n \t\t\t\t\tdefault: false,\n \t\t\t\t\tvendors: {\n-\t\t\t\t\t\ttest: "vendors",\n+\t\t\t\t\t\ttest: /[\\\\/]node_modules[\\\\/]/,\n \t\t\t\t\t\tname: "vendors",\n \t\t\t\t\t\tenforce: true,\n \t\t\t\t\t\tchunks: chunk => chunk.name !== "a"\n', 'commit_subject': 'emit error when splitChunks.name points to existing chunk name', 'repo_name': 'webpack/webpack', 'committer': {'name': 'Tobias Koppers', 'email': '0cad4b845df78a4c17cdaf2dcf19cc8e39488037@googlemail.com', 'time_sec': '1535963863', 'tz_offset': '120', 'date': {'seconds': '1535963863'}}, 'commit_tree': '83aaacd613643b3bbf48133062b7ac1d6f3e2520', 'commit_message': 'emit error when splitChunks.name points to existing chunk name\n', 'language_name': 'Shell', 'license': 'mit', 'hunks': '@@ -59,10 +59,9 @@ module.exports = [\n \t\tmode: "production",\n \t\tentry: {\n \t\t\tmain: "./",\n-\t\t\ta: "./a",\n-\t\t\tb: "./b",\n-\t\t\tc: "./c",\n-\t\t\tvendors: ["x", "y", "z"]\n+\t\t\ta: ["x", "y", "z", "./a"],\n+\t\t\tb: ["x", "y", "z", "./b"],\n+\t\t\tc: ["x", "y", "z", "./c"]\n \t\t},\n \t\toutput: {\n \t\t\tfilename: "default/[name].js"\n@@ -76,7 +75,7 @@ module.exports = [\n \t\t\t\tcacheGroups: {\n \t\t\t\t\tdefault: false,\n \t\t\t\t\tvendors: {\n-\t\t\t\t\t\ttest: "vendors",\n+\t\t\t\t\t\ttest: /[\\\\/]node_modules[\\\\/]/,\n \t\t\t\t\t\tname: "vendors",\n \t\t\t\t\t\tenforce: true\n \t\t\t\t\t}\n@@ -137,10 +136,9 @@ module.exports = [\n \t\tmode: "production",\n \t\tentry: {\n \t\t\tmain: "./",\n-\t\t\ta: "./a",\n-\t\t\tb: "./b",\n-\t\t\tc: "./c",\n-\t\t\tvendors: ["x", "y", "z"]\n+\t\t\ta: ["x", "y", "z", "./a"],\n+\t\t\tb: ["x", "y", "z", "./b"],\n+\t\t\tc: ["x", "y", "z", "./c"]\n \t\t},\n \t\toutput: {\n \t\t\tfilename: "default/[name].js"\n@@ -154,7 +152,7 @@ module.exports = [\n \t\t\t\tcacheGroups: {\n \t\t\t\t\tdefault: false,\n \t\t\t\t\tvendors: {\n-\t\t\t\t\t\ttest: "vendors",\n+\t\t\t\t\t\ttest: /[\\\\/]node_modules[\\\\/]/,\n \t\t\t\t\t\tname: "vendors",\n \t\t\t\t\t\tenforce: true,\n \t\t\t\t\t\tchunks: chunk => chunk.name !== "a"\n', 'addition_count': 8, 'deletion_count': 10, 'src_file': 'a/test/statsCases/split-chunks/webpack.config.js', 'tgt_file': 'b/test/statsCases/split-chunks/webpack.config.js', 'file_extension': '.js', 'before_file': 'const stats = {\n\thash: false,\n\ttimings: false,\n\tbuiltAt: false,\n\tassets: false,\n\tchunks: true,\n\tchunkRelations: true,\n\tchunkOrigins: true,\n\tentrypoints: true,\n\tmodules: false\n};\n/** @type {import("../../../").Configuration[]} */\nmodule.exports = [\n\t{\n\t\tname: "default",\n\t\tmode: "production",\n\t\tentry: {\n\t\t\tmain: "./",\n\t\t\ta: "./a",\n\t\t\tb: "./b",\n\t\t\tc: "./c"\n\t\t},\n\t\toutput: {\n\t\t\tfilename: "default/[name].js"\n\t\t},\n\t\toptimization: {\n\t\t\tsplitChunks: {\n\t\t\t\tminSize: 0 // enforce all\n\t\t\t}\n\t\t},\n\t\tstats\n\t},\n\n\t{\n\t\tname: "all-chunks",\n\t\tmode: "production",\n\t\tentry: {\n\t\t\tmain: "./",\n\t\t\ta: "./a",\n\t\t\tb: "./b",\n\t\t\tc: "./c"\n\t\t},\n\t\toutput: {\n\t\t\tfilename: "all-chunks/[name].js"\n\t\t},\n\t\toptimization: {\n\t\t\tsplitChunks: {\n\t\t\t\tminSize: 0, // enforce all,\n\t\t\t\tchunks: "all"\n\t\t\t}\n\t\t},\n\t\tstats\n\t},\n\n\t{\n\t\tname: "manual",\n\t\tmode: "production",\n\t\tentry: {\n\t\tmode: "production",\n\t\tentry: {\n\t\t\tmain: "./",\n\t\t\ta: "./a",\n\t\t\tb: "./b",\n\t\t\tc: "./c",\n\t\t\tvendors: ["x", "y", "z"]\n\t\t},\n\t\toutput: {\n\t\t\tfilename: "default/[name].js"\n\t\t\tsplitChunks: {\n\t\t\t\tminSize: 0, // enforce all,\n\t\t\t\tchunks: "all",\n\t\t\t\tcacheGroups: {\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tvendors: {\n\t\t\t\t\t\ttest: /[\\\\/]node_modules[\\\\/]/,\n\t\t\t\tcacheGroups: {\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tvendors: {\n\t\t\t\t\t\ttest: "vendors",\n\t\t\t\t\t\tname: "vendors",\n\t\t\t\t\t\tenforce: true\n\t\t\t\t\t}\n\t},\n\t{\n\t\tname: "name-too-long",\n\t\tmode: "production",\n\t\tentry: {\n\t\t\tmain: "./",\n\t\t\taaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: "./a",\n\t\t\tbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb: "./b",\n\t\t\tcccccccccccccccccccccccccccccc: "./c"\n\t\t},\n\t\toutput: {\n\t\t\tfilename: "name-too-long/[name].js"\n\t\t},\n\t\toptimization: {\n\t\t\tsplitChunks: {\n\t\t\t\tminSize: 0,\n\t\t\t\tmaxInitialRequests: Infinity,\n\t\t\t\tchunks: "all"\n\t\t\t}\n\t\t},\n\t\tstats\n\t},\n\n\t{\n\t\tname: "custom-chunks-filter",\n\t\tmode: "production",\n\t\tentry: {\n\t\t\tmain: "./",\n\t\t\ta: "./a",\n\t\t\tb: "./b",\n\t\t\tc: "./c"\n\t\t},\n\t\toutput: {\n\t\t\tfilename: "custom-chunks-filter/[name].js"\n\t\t},\n\t\toptimization: {\n\t\t\tsplitChunks: {\n\t\t\t\tminSize: 0,\n\t\t\t\tchunks: chunk => chunk.name !== "a"\n\t\t\t}\n\t\t},\n\t\tstats\n\t},\n\n\t{\n\t\tname: "custom-chunks-filter-in-cache-groups",\n\t\tmode: "production",\n\t\tentry: {\n\t\t\tmain: "./",\n\t\t\ta: ["x", "y", "z", "./a"],\n\t\t\tb: ["x", "y", "z", "./b"],\n\t\t\tc: ["x", "y", "z", "./c"]\n\t\t},\n\t\toutput: {\n\t\tmode: "production",\n\t\tentry: {\n\t\t\tmain: "./",\n\t\t\ta: "./a",\n\t\t\tb: "./b",\n\t\t\tc: "./c",\n\t\t\tvendors: ["x", "y", "z"]\n\t\t},\n\t\toutput: {\n\t\t\tfilename: "default/[name].js"\n\t\t\t\t\t\ttest: /[\\\\/]node_modules[\\\\/]/,\n\t\t\t\t\t\tname: "vendors",\n\t\t\t\t\t\tenforce: true,\n\t\t\t\t\t\tchunks: chunk => chunk.name !== "a"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\tcacheGroups: {\n\t\t\t\t\tdefault: false,\n\t\t\t\t\tvendors: {\n\t\t\t\t\t\ttest: "vendors",\n\t\t\t\t\t\tname: "vendors",\n\t\t\t\t\t\tenforce: true,\n\t\t\t\t\t\tchunks: chunk => chunk.name !== "a"\n', 'message': 'emit error when splitChunks.name points to existing chunk name\n', 'author_name': 'Tobias Koppers', 'lang': 'config'}