From 3554793b4ba23d1173685b8cfa277b5bbadd0d74 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 7 Jan 2021 16:51:08 +0100 Subject: [PATCH 1/2] fix bug where module size is added multiple times to the split chunk info fixes #12307 --- lib/optimize/SplitChunksPlugin.js | 12 +++++--- .../split-chunks/issue-12307/a-only-module.js | 0 .../configCases/split-chunks/issue-12307/a.js | 2 ++ .../configCases/split-chunks/issue-12307/b.js | 1 + .../split-chunks/issue-12307/index.js | 4 +++ .../split-chunks/issue-12307/shared-module.js | 1 + .../issue-12307/webpack.config.js | 29 +++++++++++++++++++ 7 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 test/configCases/split-chunks/issue-12307/a-only-module.js create mode 100644 test/configCases/split-chunks/issue-12307/a.js create mode 100644 test/configCases/split-chunks/issue-12307/b.js create mode 100644 test/configCases/split-chunks/issue-12307/index.js create mode 100644 test/configCases/split-chunks/issue-12307/shared-module.js create mode 100644 test/configCases/split-chunks/issue-12307/webpack.config.js diff --git a/lib/optimize/SplitChunksPlugin.js b/lib/optimize/SplitChunksPlugin.js index edca93f24..ba04347c0 100644 --- a/lib/optimize/SplitChunksPlugin.js +++ b/lib/optimize/SplitChunksPlugin.js @@ -1113,12 +1113,16 @@ module.exports = class SplitChunksPlugin { }) ); } + const oldSize = info.modules.size; info.modules.add(module); - for (const type of module.getSourceTypes()) { - info.sizes[type] = (info.sizes[type] || 0) + module.size(type); + if (info.modules.size !== oldSize) { + for (const type of module.getSourceTypes()) { + info.sizes[type] = (info.sizes[type] || 0) + module.size(type); + } } - if (!info.chunksKeys.has(selectedChunksKey)) { - info.chunksKeys.add(selectedChunksKey); + const oldChunksKeysSize = info.chunksKeys.size; + info.chunksKeys.add(selectedChunksKey); + if (oldChunksKeysSize !== info.chunksKeys.size) { for (const chunk of selectedChunks) { info.chunks.add(chunk); } diff --git a/test/configCases/split-chunks/issue-12307/a-only-module.js b/test/configCases/split-chunks/issue-12307/a-only-module.js new file mode 100644 index 000000000..e69de29bb diff --git a/test/configCases/split-chunks/issue-12307/a.js b/test/configCases/split-chunks/issue-12307/a.js new file mode 100644 index 000000000..62ba2bbb4 --- /dev/null +++ b/test/configCases/split-chunks/issue-12307/a.js @@ -0,0 +1,2 @@ +import "./a-only-module"; +import "./shared-module"; diff --git a/test/configCases/split-chunks/issue-12307/b.js b/test/configCases/split-chunks/issue-12307/b.js new file mode 100644 index 000000000..181dd93c0 --- /dev/null +++ b/test/configCases/split-chunks/issue-12307/b.js @@ -0,0 +1 @@ +import("./shared-module"); diff --git a/test/configCases/split-chunks/issue-12307/index.js b/test/configCases/split-chunks/issue-12307/index.js new file mode 100644 index 000000000..4ca0b89ec --- /dev/null +++ b/test/configCases/split-chunks/issue-12307/index.js @@ -0,0 +1,4 @@ +it("should not split the shared-modules into a separate chunk", () => { + const shared = __STATS__.modules.find(m => m.name.includes("shared-module")); + expect(shared.chunks).toEqual(["a", "shared-module_js"]); +}); diff --git a/test/configCases/split-chunks/issue-12307/shared-module.js b/test/configCases/split-chunks/issue-12307/shared-module.js new file mode 100644 index 000000000..9cc8c7e2f --- /dev/null +++ b/test/configCases/split-chunks/issue-12307/shared-module.js @@ -0,0 +1 @@ +// content content content content content content content content content diff --git a/test/configCases/split-chunks/issue-12307/webpack.config.js b/test/configCases/split-chunks/issue-12307/webpack.config.js new file mode 100644 index 000000000..9b3b9ad5d --- /dev/null +++ b/test/configCases/split-chunks/issue-12307/webpack.config.js @@ -0,0 +1,29 @@ +/** @type {import("../../../../").Configuration} */ +module.exports = { + entry: { + bundle0: "./index", + a: "./a", + b: "./b" + }, + output: { + filename: "[name].js" + }, + optimization: { + chunkIds: "named", + sideEffects: false, + splitChunks: { + cacheGroups: { + default: false, + defaultVendors: false, + test: { + test: /shared/, + minChunks: 1, + usedExports: false, + chunks: "initial", + minSize: 100, + minRemainingSize: 0 + } + } + } + } +}; From 35c7801b5e5320b0830e84ca10a3dfdab0999847 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Thu, 7 Jan 2021 21:47:08 +0100 Subject: [PATCH 2/2] fix bug where cacheGroup index was inverted --- lib/optimize/SplitChunksPlugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/optimize/SplitChunksPlugin.js b/lib/optimize/SplitChunksPlugin.js index ba04347c0..9b1ae3399 100644 --- a/lib/optimize/SplitChunksPlugin.js +++ b/lib/optimize/SplitChunksPlugin.js @@ -232,7 +232,7 @@ const compareEntries = (a, b) => { const diffSizeReduce = aSizeReduce - bSizeReduce; if (diffSizeReduce) return diffSizeReduce; // 4. by cache group index - const indexDiff = a.cacheGroupIndex - b.cacheGroupIndex; + const indexDiff = b.cacheGroupIndex - a.cacheGroupIndex; if (indexDiff) return indexDiff; // 5. by number of modules (to be able to compare by identifier) const modulesA = a.modules;