summaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-31 15:37:35 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-31 15:37:35 +0800
commitd5f14083061f2ce6a42313188443a42e30796320 (patch)
treecc6a9889e08b29595a76a33b9e7b4ef84866468b /node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js
parentb1a6ea021f29f182b62f9f81024a3d8ac8621b7f (diff)
added make browserlist(autoprefixer) work fixed
Diffstat (limited to 'node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js')
-rw-r--r--node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js115
1 files changed, 115 insertions, 0 deletions
diff --git a/node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js b/node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js
new file mode 100644
index 00000000..76cc2479
--- /dev/null
+++ b/node_modules/webpack/lib/optimize/MergeDuplicateChunksPlugin.js
@@ -0,0 +1,115 @@
+/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+"use strict";
+
+const { STAGE_BASIC } = require("../OptimizationStages");
+const { runtimeEqual } = require("../util/runtime");
+
+/** @typedef {import("../Compiler")} Compiler */
+
+class MergeDuplicateChunksPlugin {
+ /**
+ * @param {Compiler} compiler the compiler
+ * @returns {void}
+ */
+ apply(compiler) {
+ compiler.hooks.compilation.tap(
+ "MergeDuplicateChunksPlugin",
+ compilation => {
+ compilation.hooks.optimizeChunks.tap(
+ {
+ name: "MergeDuplicateChunksPlugin",
+ stage: STAGE_BASIC
+ },
+ chunks => {
+ const { chunkGraph, moduleGraph } = compilation;
+
+ // remember already tested chunks for performance
+ const notDuplicates = new Set();
+
+ // for each chunk
+ for (const chunk of chunks) {
+ // track a Set of all chunk that could be duplicates
+ let possibleDuplicates;
+ for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
+ if (possibleDuplicates === undefined) {
+ // when possibleDuplicates is not yet set,
+ // create a new Set from chunks of the current module
+ // including only chunks with the same number of modules
+ for (const dup of chunkGraph.getModuleChunksIterable(
+ module
+ )) {
+ if (
+ dup !== chunk &&
+ chunkGraph.getNumberOfChunkModules(chunk) ===
+ chunkGraph.getNumberOfChunkModules(dup) &&
+ !notDuplicates.has(dup)
+ ) {
+ // delay allocating the new Set until here, reduce memory pressure
+ if (possibleDuplicates === undefined) {
+ possibleDuplicates = new Set();
+ }
+ possibleDuplicates.add(dup);
+ }
+ }
+ // when no chunk is possible we can break here
+ if (possibleDuplicates === undefined) break;
+ } else {
+ // validate existing possible duplicates
+ for (const dup of possibleDuplicates) {
+ // remove possible duplicate when module is not contained
+ if (!chunkGraph.isModuleInChunk(module, dup)) {
+ possibleDuplicates.delete(dup);
+ }
+ }
+ // when all chunks has been removed we can break here
+ if (possibleDuplicates.size === 0) break;
+ }
+ }
+
+ // when we found duplicates
+ if (
+ possibleDuplicates !== undefined &&
+ possibleDuplicates.size > 0
+ ) {
+ outer: for (const otherChunk of possibleDuplicates) {
+ if (otherChunk.hasRuntime() !== chunk.hasRuntime()) continue;
+ if (chunkGraph.getNumberOfEntryModules(chunk) > 0) continue;
+ if (chunkGraph.getNumberOfEntryModules(otherChunk) > 0)
+ continue;
+ if (!runtimeEqual(chunk.runtime, otherChunk.runtime)) {
+ for (const module of chunkGraph.getChunkModulesIterable(
+ chunk
+ )) {
+ const exportsInfo = moduleGraph.getExportsInfo(module);
+ if (
+ !exportsInfo.isEquallyUsed(
+ chunk.runtime,
+ otherChunk.runtime
+ )
+ ) {
+ continue outer;
+ }
+ }
+ }
+ // merge them
+ if (chunkGraph.canChunksBeIntegrated(chunk, otherChunk)) {
+ chunkGraph.integrateChunks(chunk, otherChunk);
+ compilation.chunks.delete(otherChunk);
+ }
+ }
+ }
+
+ // don't check already processed chunks twice
+ notDuplicates.add(chunk);
+ }
+ }
+ );
+ }
+ );
+ }
+}
+module.exports = MergeDuplicateChunksPlugin;