| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";class AggressiveMergingPlugin {	constructor(options) {		if (			(options !== undefined && typeof options !== "object") ||			Array.isArray(options)		) {			throw new Error(				"Argument should be an options object. To use defaults, pass in nothing.\nFor more info on options, see https://webpack.js.org/plugins/"			);		}		this.options = options || {};	}	apply(compiler) {		const options = this.options;		const minSizeReduce = options.minSizeReduce || 1.5;		compiler.hooks.thisCompilation.tap(			"AggressiveMergingPlugin",			compilation => {				compilation.hooks.optimizeChunksAdvanced.tap(					"AggressiveMergingPlugin",					chunks => {						let combinations = [];						chunks.forEach((a, idx) => {							if (a.canBeInitial()) return;							for (let i = 0; i < idx; i++) {								const b = chunks[i];								if (b.canBeInitial()) continue;								combinations.push({									a,									b,									improvement: undefined								});							}						});						for (const pair of combinations) {							const a = pair.b.size({								chunkOverhead: 0							});							const b = pair.a.size({								chunkOverhead: 0							});							const ab = pair.b.integratedSize(pair.a, {								chunkOverhead: 0							});							let newSize;							if (ab === false) {								pair.improvement = false;								return;							} else {								newSize = ab;							}							pair.improvement = (a + b) / newSize;						}						combinations = combinations.filter(pair => {							return pair.improvement !== false;						});						combinations.sort((a, b) => {							return b.improvement - a.improvement;						});						const pair = combinations[0];						if (!pair) return;						if (pair.improvement < minSizeReduce) return;						if (pair.b.integrate(pair.a, "aggressive-merge")) {							chunks.splice(chunks.indexOf(pair.a), 1);							return true;						}					}				);			}		);	}}module.exports = AggressiveMergingPlugin;
 |