From bbff7403fbf46f9ad92240ac213df8d30ef31b64 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 20 Sep 2018 02:56:13 +0200 Subject: update packages --- .../lib/optimize/EnsureChunkConditionsPlugin.js | 110 +++++++++++++-------- 1 file changed, 70 insertions(+), 40 deletions(-) (limited to 'node_modules/webpack/lib/optimize/EnsureChunkConditionsPlugin.js') diff --git a/node_modules/webpack/lib/optimize/EnsureChunkConditionsPlugin.js b/node_modules/webpack/lib/optimize/EnsureChunkConditionsPlugin.js index 2b291fdad..5d05ec834 100644 --- a/node_modules/webpack/lib/optimize/EnsureChunkConditionsPlugin.js +++ b/node_modules/webpack/lib/optimize/EnsureChunkConditionsPlugin.js @@ -1,40 +1,70 @@ -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -"use strict"; - -class EnsureChunkConditionsPlugin { - - apply(compiler) { - compiler.plugin("compilation", (compilation) => { - const triesMap = new Map(); - compilation.plugin(["optimize-chunks-basic", "optimize-extracted-chunks-basic"], (chunks) => { - let changed = false; - chunks.forEach((chunk) => { - chunk.forEachModule((module) => { - if(!module.chunkCondition) return; - if(!module.chunkCondition(chunk)) { - let usedChunks = triesMap.get(module); - if(!usedChunks) triesMap.set(module, usedChunks = new Set()); - usedChunks.add(chunk); - const newChunks = []; - chunk.parents.forEach((parent) => { - if(!usedChunks.has(parent)) { - parent.addModule(module); - module.addChunk(parent); - newChunks.push(parent); - } - }); - module.rewriteChunkInReasons(chunk, newChunks); - chunk.removeModule(module); - changed = true; - } - }); - }); - if(changed) return true; - }); - }); - } -} -module.exports = EnsureChunkConditionsPlugin; +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const GraphHelpers = require("../GraphHelpers"); + +class EnsureChunkConditionsPlugin { + apply(compiler) { + compiler.hooks.compilation.tap( + "EnsureChunkConditionsPlugin", + compilation => { + const handler = chunks => { + let changed = false; + for (const module of compilation.modules) { + if (!module.chunkCondition) continue; + const sourceChunks = new Set(); + const chunkGroups = new Set(); + for (const chunk of module.chunksIterable) { + if (!module.chunkCondition(chunk)) { + sourceChunks.add(chunk); + for (const group of chunk.groupsIterable) { + chunkGroups.add(group); + } + } + } + if (sourceChunks.size === 0) continue; + const targetChunks = new Set(); + chunkGroupLoop: for (const chunkGroup of chunkGroups) { + // Can module be placed in a chunk of this group? + for (const chunk of chunkGroup.chunks) { + if (module.chunkCondition(chunk)) { + targetChunks.add(chunk); + continue chunkGroupLoop; + } + } + // We reached the entrypoint: fail + if (chunkGroup.isInitial()) { + throw new Error( + "Cannot fullfil chunk condition of " + module.identifier() + ); + } + // Try placing in all parents + for (const group of chunkGroup.parentsIterable) { + chunkGroups.add(group); + } + } + for (const sourceChunk of sourceChunks) { + GraphHelpers.disconnectChunkAndModule(sourceChunk, module); + } + for (const targetChunk of targetChunks) { + GraphHelpers.connectChunkAndModule(targetChunk, module); + } + } + if (changed) return true; + }; + compilation.hooks.optimizeChunksBasic.tap( + "EnsureChunkConditionsPlugin", + handler + ); + compilation.hooks.optimizeExtractedChunksBasic.tap( + "EnsureChunkConditionsPlugin", + handler + ); + } + ); + } +} +module.exports = EnsureChunkConditionsPlugin; -- cgit v1.2.3