diff --git a/src/utils/chunkAssignment.ts b/src/utils/chunkAssignment.ts index b8c727cea0c..2a0a250b4d1 100644 --- a/src/utils/chunkAssignment.ts +++ b/src/utils/chunkAssignment.ts @@ -538,9 +538,7 @@ function getOptimizedChunks( chunkPartition.small.size, 'were below minChunkSize.' ); - if (chunkPartition.small.size > 0) { - mergeChunks(chunkPartition, minChunkSize); - } + mergeChunks(chunkPartition, minChunkSize); minChunkSize > 1 && console.log( 'After merging chunks,\n', diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_config.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_config.js new file mode 100644 index 00000000000..801623fc162 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_config.js @@ -0,0 +1,9 @@ +module.exports = defineTest({ + description: 'avoids circular dependencies when merging chunks', + options: { + input: ['main1.js', 'main2.js', 'main3.js'], + output: { + experimentalMinChunkSize: 100 + } + } +}); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/generated-main3.js new file mode 100644 index 00000000000..2148994ec8b --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/generated-main3.js @@ -0,0 +1,19 @@ +define(['exports'], (function (exports) { 'use strict'; + + const second = 1; + + const shared = second + 'shared'; + + const main1 = 1; + + const main2 = 2; + + const main3 = 3; + + exports.main1 = main1; + exports.main2 = main2; + exports.main3 = main3; + exports.second = second; + exports.shared = shared; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main1.js new file mode 100644 index 00000000000..0ff6502f831 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main1.js @@ -0,0 +1,9 @@ +define(['exports', './generated-main3'], (function (exports, main1) { 'use strict'; + + + + exports.main1 = main1.main1; + exports.second = main1.second; + exports.shared = main1.shared; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main2.js new file mode 100644 index 00000000000..9177dce7aed --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main2.js @@ -0,0 +1,8 @@ +define(['exports', './generated-main3'], (function (exports, main1) { 'use strict'; + + + + exports.main2 = main1.main2; + exports.shared = main1.shared; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main3.js new file mode 100644 index 00000000000..9d8af293e2a --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/amd/main3.js @@ -0,0 +1,8 @@ +define(['exports', './generated-main3'], (function (exports, main1) { 'use strict'; + + + + exports.main3 = main1.main3; + exports.second = main1.second; + +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/generated-main3.js new file mode 100644 index 00000000000..e2d0f24ec93 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/generated-main3.js @@ -0,0 +1,17 @@ +'use strict'; + +const second = 1; + +const shared = second + 'shared'; + +const main1 = 1; + +const main2 = 2; + +const main3 = 3; + +exports.main1 = main1; +exports.main2 = main2; +exports.main3 = main3; +exports.second = second; +exports.shared = shared; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main1.js new file mode 100644 index 00000000000..65fa3d1d5a4 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main1.js @@ -0,0 +1,9 @@ +'use strict'; + +var main1 = require('./generated-main3.js'); + + + +exports.main1 = main1.main1; +exports.second = main1.second; +exports.shared = main1.shared; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main2.js new file mode 100644 index 00000000000..a41d0d2ccca --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main2.js @@ -0,0 +1,8 @@ +'use strict'; + +var main1 = require('./generated-main3.js'); + + + +exports.main2 = main1.main2; +exports.shared = main1.shared; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main3.js new file mode 100644 index 00000000000..fe715fab704 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/cjs/main3.js @@ -0,0 +1,8 @@ +'use strict'; + +var main1 = require('./generated-main3.js'); + + + +exports.main3 = main1.main3; +exports.second = main1.second; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/generated-main3.js new file mode 100644 index 00000000000..228caf6f062 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/generated-main3.js @@ -0,0 +1,11 @@ +const second = 1; + +const shared = second + 'shared'; + +const main1 = 1; + +const main2 = 2; + +const main3 = 3; + +export { second as a, main2 as b, main3 as c, main1 as m, shared as s }; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main1.js new file mode 100644 index 00000000000..66f41b186ac --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main1.js @@ -0,0 +1 @@ +export { m as main1, a as second, s as shared } from './generated-main3.js'; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main2.js new file mode 100644 index 00000000000..7f9d022e2bb --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main2.js @@ -0,0 +1 @@ +export { b as main2, s as shared } from './generated-main3.js'; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main3.js new file mode 100644 index 00000000000..2c16e71ba70 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/es/main3.js @@ -0,0 +1 @@ +export { c as main3, a as second } from './generated-main3.js'; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/generated-main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/generated-main3.js new file mode 100644 index 00000000000..918b519a561 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/generated-main3.js @@ -0,0 +1,18 @@ +System.register([], (function (exports) { + 'use strict'; + return { + execute: (function () { + + const second = exports('a', 1); + + const shared = exports('s', second + 'shared'); + + const main1 = exports('m', 1); + + const main2 = exports('b', 2); + + const main3 = exports('c', 3); + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main1.js new file mode 100644 index 00000000000..2971fd867f7 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main1.js @@ -0,0 +1,13 @@ +System.register(['./generated-main3.js'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports({ main1: module.m, second: module.a, shared: module.s }); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main2.js new file mode 100644 index 00000000000..d52b7537c89 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main2.js @@ -0,0 +1,13 @@ +System.register(['./generated-main3.js'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports({ main2: module.b, shared: module.s }); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main3.js new file mode 100644 index 00000000000..c70006d41c6 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/_expected/system/main3.js @@ -0,0 +1,13 @@ +System.register(['./generated-main3.js'], (function (exports) { + 'use strict'; + return { + setters: [function (module) { + exports({ main3: module.c, second: module.a }); + }], + execute: (function () { + + + + }) + }; +})); diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main1.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main1.js new file mode 100644 index 00000000000..4c1436ba1d8 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main1.js @@ -0,0 +1,3 @@ +export { shared } from './shared'; +export { second } from './second'; +export const main1 = 1; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main2.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main2.js new file mode 100644 index 00000000000..7480a1b6abf --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main2.js @@ -0,0 +1,2 @@ +export { shared } from './shared'; +export const main2 = 2; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main3.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main3.js new file mode 100644 index 00000000000..f6e676e5b5d --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/main3.js @@ -0,0 +1,2 @@ +export { second } from './second'; +export const main3 = 3; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/second.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/second.js new file mode 100644 index 00000000000..aca216a37b9 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/second.js @@ -0,0 +1 @@ +export const second = 1; diff --git a/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/shared.js b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/shared.js new file mode 100644 index 00000000000..0d10caaea19 --- /dev/null +++ b/test/chunking-form/samples/min-chunk-size/avoid-circular-dependencies2/shared.js @@ -0,0 +1,2 @@ +import { second } from './second'; +export const shared = second + 'shared';