diff --git a/lib/optimize/SplitChunksPlugin.js b/lib/optimize/SplitChunksPlugin.js index c65eaa4d101..8626d4b177f 100644 --- a/lib/optimize/SplitChunksPlugin.js +++ b/lib/optimize/SplitChunksPlugin.js @@ -304,6 +304,8 @@ module.exports = class SplitChunksPlugin { chunk => !chunk.canBeInitial() ) : Array.from(chunkCombination); + // Break if minimum number of chunks is not reached + if (selectedChunks.length < cacheGroup.minChunks) continue; // Determine name for split chunk const name = cacheGroup.getName( module, diff --git a/test/statsCases/split-chunks-issue-6696/a.js b/test/statsCases/split-chunks-issue-6696/a.js new file mode 100644 index 00000000000..856f26b34c3 --- /dev/null +++ b/test/statsCases/split-chunks-issue-6696/a.js @@ -0,0 +1 @@ +import "x"; diff --git a/test/statsCases/split-chunks-issue-6696/b.js b/test/statsCases/split-chunks-issue-6696/b.js new file mode 100644 index 00000000000..856f26b34c3 --- /dev/null +++ b/test/statsCases/split-chunks-issue-6696/b.js @@ -0,0 +1 @@ +import "x"; diff --git a/test/statsCases/split-chunks-issue-6696/expected.txt b/test/statsCases/split-chunks-issue-6696/expected.txt new file mode 100644 index 00000000000..783724c3488 --- /dev/null +++ b/test/statsCases/split-chunks-issue-6696/expected.txt @@ -0,0 +1,15 @@ +Entrypoint main = vendors.js main.js +chunk {0} async-a.js (async-a) 32 bytes <{2}> <{3}> [rendered] + > ./a [3] ./index.js 2:0-47 + [0] ./node_modules/x.js 20 bytes {0} {1} [built] + [1] ./a.js 12 bytes {0} [built] +chunk {1} async-b.js (async-b) 32 bytes <{2}> <{3}> [rendered] + > ./b [3] ./index.js 3:0-47 + [0] ./node_modules/x.js 20 bytes {0} {1} [built] + [2] ./b.js 12 bytes {1} [built] +chunk {2} main.js (main) 110 bytes ={3}= >{0}< >{1}< [entry] [rendered] + > ./ main + [3] ./index.js 110 bytes {2} [built] +chunk {3} vendors.js (vendors) 20 bytes ={2}= >{0}< >{1}< [initial] [rendered] split chunk (cache group: vendors) (name: vendors) + > ./ main + [4] ./node_modules/y.js 20 bytes {3} [built] \ No newline at end of file diff --git a/test/statsCases/split-chunks-issue-6696/index.js b/test/statsCases/split-chunks-issue-6696/index.js new file mode 100644 index 00000000000..bba35d2690f --- /dev/null +++ b/test/statsCases/split-chunks-issue-6696/index.js @@ -0,0 +1,3 @@ +import "y"; +import(/* webpackChunkName: "async-a" */ "./a"); +import(/* webpackChunkName: "async-b" */ "./b"); diff --git a/test/statsCases/split-chunks-issue-6696/node_modules/x.js b/test/statsCases/split-chunks-issue-6696/node_modules/x.js new file mode 100644 index 00000000000..3fd5ecc7a40 --- /dev/null +++ b/test/statsCases/split-chunks-issue-6696/node_modules/x.js @@ -0,0 +1 @@ +export default "x"; diff --git a/test/statsCases/split-chunks-issue-6696/node_modules/y.js b/test/statsCases/split-chunks-issue-6696/node_modules/y.js new file mode 100644 index 00000000000..413e7c09da6 --- /dev/null +++ b/test/statsCases/split-chunks-issue-6696/node_modules/y.js @@ -0,0 +1 @@ +export default "y"; diff --git a/test/statsCases/split-chunks-issue-6696/webpack.config.js b/test/statsCases/split-chunks-issue-6696/webpack.config.js new file mode 100644 index 00000000000..6a74b935b88 --- /dev/null +++ b/test/statsCases/split-chunks-issue-6696/webpack.config.js @@ -0,0 +1,34 @@ +const stats = { + hash: false, + timings: false, + builtAt: false, + assets: false, + chunks: true, + chunkOrigins: true, + entrypoints: true, + modules: false +}; +module.exports = { + name: "default", + mode: "production", + entry: { + main: "./" + }, + output: { + filename: "[name].js" + }, + optimization: { + splitChunks: { + cacheGroups: { + default: false, + vendors: { + test: /[\\/]node_modules[\\/]/, + chunks: "initial", + enforce: true, + name: "vendors" + } + } + } + }, + stats +};