aboutsummaryrefslogtreecommitdiff
path: root/node_modules/webpack/lib/optimize/EnsureChunkConditionsPlugin.js
blob: 71ee1853353700fae95d5e2c34915c30ae76da08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
"use strict";

class EnsureChunkConditionsPlugin {

	apply(compiler) {
		compiler.plugin("compilation", (compilation) => {
			compilation.plugin(["optimize-chunks-basic", "optimize-extracted-chunks-basic"], (chunks) => {
				let changed = false;
				chunks.forEach((chunk) => {
					chunk.modules.slice().forEach((module) => {
						if(!module.chunkCondition) return;
						if(!module.chunkCondition(chunk)) {
							const usedChunks = module._EnsureChunkConditionsPlugin_usedChunks = (module._EnsureChunkConditionsPlugin_usedChunks || []).concat(chunk);
							const newChunks = [];
							chunk.parents.forEach((parent) => {
								if(usedChunks.indexOf(parent) < 0) {
									parent.addModule(module);
									newChunks.push(parent);
								}
							});
							module.rewriteChunkInReasons(chunk, newChunks);
							chunk.removeModule(module);
							changed = true;
						}
					});
				});
				if(changed) return true;
			});
		});
	}
}
module.exports = EnsureChunkConditionsPlugin;