Skip to content

Commit 994613b

Browse files
committed
fixes webpack#7499
1 parent 02a955b commit 994613b

File tree

12 files changed

+147
-86
lines changed

12 files changed

+147
-86
lines changed

lib/optimize/SplitChunksPlugin.js

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,14 @@ const getModulesSize = modules => {
4242
return sum;
4343
};
4444

45+
/**
46+
* @template T
47+
* @param {Set<T>} a set
48+
* @param {Set<T>} b other set
49+
* @returns {boolean} true if at least one item of a is in b
50+
*/
4551
const isOverlap = (a, b) => {
46-
for (const item of a.keys()) {
52+
for (const item of a) {
4753
if (b.has(item)) return true;
4854
}
4955
return false;
@@ -388,7 +394,7 @@ module.exports = class SplitChunksPlugin {
388394
* @property {TODO} cacheGroup
389395
* @property {string} name
390396
* @property {number} size
391-
* @property {Map<Chunk, number>} chunks
397+
* @property {Set<Chunk>} chunks
392398
* @property {Set<Chunk>} reuseableChunks
393399
* @property {Set<string>} chunksKeys
394400
*/
@@ -436,7 +442,7 @@ module.exports = class SplitChunksPlugin {
436442
cacheGroup,
437443
name,
438444
size: 0,
439-
chunks: new Map(),
445+
chunks: new Set(),
440446
reuseableChunks: new Set(),
441447
chunksKeys: new Set()
442448
})
@@ -447,7 +453,7 @@ module.exports = class SplitChunksPlugin {
447453
if (!info.chunksKeys.has(selectedChunksKey)) {
448454
info.chunksKeys.add(selectedChunksKey);
449455
for (const chunk of selectedChunks) {
450-
info.chunks.set(chunk, chunk.getNumberOfModules());
456+
info.chunks.add(chunk);
451457
}
452458
}
453459
};
@@ -561,32 +567,33 @@ module.exports = class SplitChunksPlugin {
561567
// When no chunk name, check if we can reuse a chunk instead of creating a new one
562568
let isReused = false;
563569
if (item.cacheGroup.reuseExistingChunk) {
564-
for (const pair of item.chunks) {
565-
if (pair[1] === item.modules.size) {
566-
const chunk = pair[0];
567-
if (chunk.hasEntryModule()) continue;
568-
if (!newChunk || !newChunk.name) {
569-
newChunk = chunk;
570-
} else if (
571-
chunk.name &&
572-
chunk.name.length < newChunk.name.length
573-
) {
574-
newChunk = chunk;
575-
} else if (
576-
chunk.name &&
577-
chunk.name.length === newChunk.name.length &&
578-
chunk.name < newChunk.name
579-
) {
580-
newChunk = chunk;
581-
}
582-
chunkName = undefined;
583-
isReused = true;
570+
outer: for (const chunk of item.chunks) {
571+
if (chunk.getNumberOfModules() !== item.modules.size) continue;
572+
if (chunk.hasEntryModule()) continue;
573+
for (const module of item.modules) {
574+
if (!chunk.containsModule(module)) continue outer;
575+
}
576+
if (!newChunk || !newChunk.name) {
577+
newChunk = chunk;
578+
} else if (
579+
chunk.name &&
580+
chunk.name.length < newChunk.name.length
581+
) {
582+
newChunk = chunk;
583+
} else if (
584+
chunk.name &&
585+
chunk.name.length === newChunk.name.length &&
586+
chunk.name < newChunk.name
587+
) {
588+
newChunk = chunk;
584589
}
590+
chunkName = undefined;
591+
isReused = true;
585592
}
586593
}
587594
// Check if maxRequests condition can be fullfilled
588595

589-
const usedChunks = Array.from(item.chunks.keys()).filter(chunk => {
596+
const usedChunks = Array.from(item.chunks).filter(chunk => {
590597
// skip if we address ourself
591598
return (
592599
(!chunkName || chunk.name !== chunkName) && chunk !== newChunk

test/__snapshots__/StatsTestCases.test.js.snap

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2369,70 +2369,70 @@ Child manual:
23692369
[5] ./c.js 72 bytes {4} {8} [built]
23702370
Child name-too-long:
23712371
Entrypoint main = main.js
2372-
Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js
2373-
Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js
2374-
Entrypoint cccccccccccccccccccccccccccccc = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js vendors~async-c~cccccccccccccccccccccccccccccc.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js cccccccccccccccccccccccccccccc.js
2375-
chunk {0} 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 <{9}> ={1}= ={10}= ={11}= ={12}= ={2}= ={3}= ={4}= ={5}= ={7}= ={8}= >{2}< >{6}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f)
2372+
Entrypoint aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js async-a.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js
2373+
Entrypoint bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js async-b.js bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js
2374+
Entrypoint cccccccccccccccccccccccccccccc = vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f.js vendors~async-c~cccccccccccccccccccccccccccccc.js aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js async-c.js cccccccccccccccccccccccccccccc.js
2375+
chunk {0} 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 <{9}> ={1}= ={10}= ={11}= ={12}= ={2}= ={3}= ={4}= ={5}= ={6}= ={7}= >{2}< >{8}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccc~50ebc41f)
23762376
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
23772377
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
23782378
> ./c cccccccccccccccccccccccccccccc
2379-
> ./a [7] ./index.js 1:0-47
2380-
> ./b [7] ./index.js 2:0-47
2381-
> ./c [7] ./index.js 3:0-47
2379+
> ./a [4] ./index.js 1:0-47
2380+
> ./b [4] ./index.js 2:0-47
2381+
> ./c [4] ./index.js 3:0-47
23822382
[2] ./node_modules/x.js 20 bytes {0} [built]
2383-
chunk {1} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793) 20 bytes <{9}> ={0}= ={10}= ={11}= ={12}= ={2}= ={3}= ={4}= ={5}= ={7}= ={8}= >{2}< >{6}< [initial] [rendered] split chunk (cache group: default) (name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793)
2383+
chunk {1} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793) 20 bytes <{9}> ={0}= ={10}= ={11}= ={12}= ={2}= ={3}= ={4}= ={5}= ={6}= ={7}= >{2}< >{8}< [initial] [rendered] split chunk (cache group: default) (name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~async-c~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccc~18066793)
23842384
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
23852385
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
23862386
> ./c cccccccccccccccccccccccccccccc
2387-
> ./a [7] ./index.js 1:0-47
2388-
> ./b [7] ./index.js 2:0-47
2389-
> ./c [7] ./index.js 3:0-47
2387+
> ./a [4] ./index.js 1:0-47
2388+
> ./b [4] ./index.js 2:0-47
2389+
> ./c [4] ./index.js 3:0-47
23902390
[1] ./d.js 20 bytes {1} [built]
2391-
chunk {2} async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js (async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc) 20 bytes <{0}> <{1}> <{10}> <{3}> <{5}> <{9}> ={0}= ={1}= ={11}= ={12}= ={3}= ={4}= ={6}= ={7}= ={8}= [initial] [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc)
2391+
chunk {2} async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc.js (async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc) 20 bytes <{0}> <{1}> <{10}> <{3}> <{4}> <{9}> ={0}= ={1}= ={11}= ={12}= ={3}= ={5}= ={6}= ={7}= ={8}= [initial] [rendered] split chunk (cache group: default) (name: async-b~async-c~async-g~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb~cccccccccccccccccccccccccccccc)
23922392
> ./g [] 6:0-47
23932393
> ./g [] 6:0-47
23942394
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
23952395
> ./c cccccccccccccccccccccccccccccc
2396-
> ./b [7] ./index.js 2:0-47
2397-
> ./c [7] ./index.js 3:0-47
2396+
> ./b [4] ./index.js 2:0-47
2397+
> ./c [4] ./index.js 3:0-47
23982398
[0] ./f.js 20 bytes {2} [built]
2399-
chunk {3} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 20 bytes <{9}> ={0}= ={1}= ={10}= ={11}= ={2}= ={5}= ={7}= >{2}< >{6}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)
2399+
chunk {3} vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 20 bytes <{9}> ={0}= ={1}= ={10}= ={11}= ={2}= ={4}= ={5}= >{2}< >{8}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a~async-b~bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)
24002400
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
24012401
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
2402-
> ./a [7] ./index.js 1:0-47
2403-
> ./b [7] ./index.js 2:0-47
2402+
> ./a [4] ./index.js 1:0-47
2403+
> ./b [4] ./index.js 2:0-47
24042404
[3] ./node_modules/y.js 20 bytes {3} [built]
2405-
chunk {4} vendors~async-c~cccccccccccccccccccccccccccccc.js (vendors~async-c~cccccccccccccccccccccccccccccc) 20 bytes <{9}> ={0}= ={1}= ={12}= ={2}= ={8}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~cccccccccccccccccccccccccccccc)
2406-
> ./c cccccccccccccccccccccccccccccc
2407-
> ./c [7] ./index.js 3:0-47
2408-
[6] ./node_modules/z.js 20 bytes {4} [built]
2409-
chunk {5} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a) 156 bytes <{9}> ={0}= ={1}= ={10}= ={3}= >{2}< >{6}< [initial] [rendered] split chunk (cache group: default) (name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa~async-a)
2405+
chunk {4} async-a.js (async-a) 156 bytes <{9}> ={0}= ={1}= ={10}= ={3}= >{2}< >{8}< [initial] [rendered] reused as split chunk (cache group: default)
24102406
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2411-
> ./a [7] ./index.js 1:0-47
2412-
[8] ./a.js + 1 modules 156 bytes {5} [built]
2407+
> ./a [4] ./index.js 1:0-47
2408+
[8] ./a.js + 1 modules 156 bytes {4} [built]
24132409
| ./a.js 121 bytes [built]
24142410
| ./e.js 20 bytes [built]
2415-
chunk {6} async-g.js (async-g) 34 bytes <{0}> <{1}> <{10}> <{3}> <{5}> ={2}= [rendered]
2411+
chunk {5} async-b.js (async-b) 72 bytes <{9}> ={0}= ={1}= ={11}= ={2}= ={3}= [initial] [rendered] reused as split chunk (cache group: default)
2412+
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
2413+
> ./b [4] ./index.js 2:0-47
2414+
[5] ./b.js 72 bytes {5} [built]
2415+
chunk {6} async-c.js (async-c) 72 bytes <{9}> ={0}= ={1}= ={12}= ={2}= ={7}= [initial] [rendered] reused as split chunk (cache group: default)
2416+
> ./c cccccccccccccccccccccccccccccc
2417+
> ./c [4] ./index.js 3:0-47
2418+
[6] ./c.js 72 bytes {6} [built]
2419+
chunk {7} vendors~async-c~cccccccccccccccccccccccccccccc.js (vendors~async-c~cccccccccccccccccccccccccccccc) 20 bytes <{9}> ={0}= ={1}= ={12}= ={2}= ={6}= [initial] [rendered] split chunk (cache group: vendors) (name: vendors~async-c~cccccccccccccccccccccccccccccc)
2420+
> ./c cccccccccccccccccccccccccccccc
2421+
> ./c [4] ./index.js 3:0-47
2422+
[7] ./node_modules/z.js 20 bytes {7} [built]
2423+
chunk {8} async-g.js (async-g) 34 bytes <{0}> <{1}> <{10}> <{3}> <{4}> ={2}= [rendered]
24162424
> ./g [] 6:0-47
24172425
> ./g [] 6:0-47
2418-
[9] ./g.js 34 bytes {6} [built]
2419-
chunk {7} async-b.js (async-b) 72 bytes <{9}> ={0}= ={1}= ={2}= ={3}= [rendered]
2420-
> ./b [7] ./index.js 2:0-47
2421-
[4] ./b.js 72 bytes {7} {11} [built]
2422-
chunk {8} async-c.js (async-c) 72 bytes <{9}> ={0}= ={1}= ={2}= ={4}= [rendered]
2423-
> ./c [7] ./index.js 3:0-47
2424-
[5] ./c.js 72 bytes {8} {12} [built]
2425-
chunk {9} main.js (main) 147 bytes >{0}< >{1}< >{2}< >{3}< >{4}< >{5}< >{7}< >{8}< [entry] [rendered]
2426+
[9] ./g.js 34 bytes {8} [built]
2427+
chunk {9} main.js (main) 147 bytes >{0}< >{1}< >{2}< >{3}< >{4}< >{5}< >{6}< >{7}< [entry] [rendered]
24262428
> ./ main
2427-
[7] ./index.js 147 bytes {9} [built]
2428-
chunk {10} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) 0 bytes ={0}= ={1}= ={3}= ={5}= >{2}< >{6}< [entry] [rendered]
2429+
[4] ./index.js 147 bytes {9} [built]
2430+
chunk {10} aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.js (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) 0 bytes ={0}= ={1}= ={3}= ={4}= >{2}< >{8}< [entry] [rendered]
24292431
> ./a aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2430-
chunk {11} bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 72 bytes ={0}= ={1}= ={2}= ={3}= [entry] [rendered]
2432+
chunk {11} bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb.js (bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) 0 bytes ={0}= ={1}= ={2}= ={3}= ={5}= [entry] [rendered]
24312433
> ./b bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
2432-
[4] ./b.js 72 bytes {7} {11} [built]
2433-
chunk {12} cccccccccccccccccccccccccccccc.js (cccccccccccccccccccccccccccccc) 72 bytes ={0}= ={1}= ={2}= ={4}= [entry] [rendered]
2434+
chunk {12} cccccccccccccccccccccccccccccc.js (cccccccccccccccccccccccccccccc) 0 bytes ={0}= ={1}= ={2}= ={6}= ={7}= [entry] [rendered]
24342435
> ./c cccccccccccccccccccccccccccccc
2435-
[5] ./c.js 72 bytes {8} {12} [built]
24362436
Child custom-chunks-filter:
24372437
Entrypoint main = default/main.js
24382438
Entrypoint a = default/a.js
Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,50 @@
11
const chunkLoadingSpy = jest.spyOn(__webpack_require__, "e");
22

33
it("should not have duplicate chunks in blocks", function(done) {
4-
// This split point should contain: a
5-
require.ensure([], function(require) {
6-
expect(require("./a")).toBe("a");
7-
}, "a");
4+
// This split point should contain: a
5+
require.ensure(
6+
[],
7+
function(require) {
8+
expect(require("./a")).toBe("a");
9+
},
10+
"a"
11+
);
812

9-
// This split point should contain: a and b - we use CommonsChunksPlugin to
10-
// have it only contain b and make chunk a be an async dependency.
11-
require.ensure([], function(require) {
12-
expect(require("./a")).toBe("a");
13-
expect(require("./b")).toBe("b");
14-
}, "a+b");
13+
// This split point should contain: a and b - we use CommonsChunksPlugin to
14+
// have it only contain b and make chunk a be an async dependency.
15+
require.ensure(
16+
[],
17+
function(require) {
18+
expect(require("./a")).toBe("a");
19+
expect(require("./b")).toBe("b");
20+
},
21+
"a+b"
22+
);
1523

16-
// This split point should contain: a, b and c - we use CommonsChunksPlugin to
17-
// have it only contain c and make chunks a and a+b be async dependencies.
18-
require.ensure([], function(require) {
19-
expect(require("./a")).toBe("a");
20-
expect(require("./b")).toBe("b");
21-
expect(require("./c")).toBe("c");
22-
}, "a+b+c");
24+
// This split point should contain: a, b and c - we use CommonsChunksPlugin to
25+
// have it only contain c and make chunks a and a+b be async dependencies.
26+
require.ensure(
27+
[],
28+
function(require) {
29+
expect(require("./a")).toBe("a");
30+
expect(require("./b")).toBe("b");
31+
expect(require("./c")).toBe("c");
32+
},
33+
"a+b+c"
34+
);
2335

24-
// Each of the require.ensures above should end up resolving chunks:
25-
// - a
26-
// - a, a+b
27-
// - a, a+b, a+b+c
36+
// Each of the require.ensures above should end up resolving chunks:
37+
// - a
38+
// - a, a+b
39+
// - a, a+b, a+b+c
2840
expect(chunkLoadingSpy.mock.calls.length).toBe(6);
29-
expect(chunkLoadingSpy.mock.calls).toEqual([["a"], ["a"], ["a+b~a+b+c" /* == b */], ["a"], ["a+b~a+b+c" /* == b */], ["a+b+c"]]);
41+
expect(chunkLoadingSpy.mock.calls).toEqual([
42+
["a"],
43+
["a"],
44+
["a+b" /* == b */],
45+
["a"],
46+
["a+b" /* == b */],
47+
["a+b+c" /* == c */]
48+
]);
3049
done();
3150
});
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import "./x/1";
2+
import "./y/1";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import "./y/2";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import "./y/3";
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
it("should find all modules", function() {
2+
return Promise.all([
3+
import(/* webpackChunkName: "a" */ "./a"), // has 3 modules (1 into x, 1 into y)
4+
import(/* webpackChunkName: "b" */ "./b"), // has 2 modules (1 into y)
5+
import(/* webpackChunkName: "c" */ "./c"), // has 2 modules (1 into y)
6+
])
7+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const path = require("path");
2+
3+
module.exports = {
4+
entry: "./index",
5+
optimization: {
6+
splitChunks: {
7+
cacheGroups: {
8+
x: {
9+
test: path.resolve(__dirname, "x"),
10+
name: "x",
11+
priority: 2,
12+
enforce: true
13+
},
14+
y: {
15+
test: path.resolve(__dirname, "y"),
16+
priority: 1,
17+
name: "y",
18+
enforce: true,
19+
reuseExistingChunk: true
20+
}
21+
}
22+
}
23+
}
24+
};

test/configCases/split-chunks/incorrect-chunk-reuse/x/1.js

Whitespace-only changes.

test/configCases/split-chunks/incorrect-chunk-reuse/y/1.js

Whitespace-only changes.

test/configCases/split-chunks/incorrect-chunk-reuse/y/2.js

Whitespace-only changes.

test/configCases/split-chunks/incorrect-chunk-reuse/y/3.js

Whitespace-only changes.

0 commit comments

Comments
 (0)