forked from webpack/webpack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMinChunkSizePlugin.js
More file actions
51 lines (46 loc) · 1.38 KB
/
MinChunkSizePlugin.js
File metadata and controls
51 lines (46 loc) · 1.38 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
function chunkSizeWithModules(modules) {
return modules.map(function(m) {
return m.size();
}).reduce(function(a, b) {
return a + b;
});
}
function MinChunkSizePlugin(minChunkSize) {
this.minChunkSize = minChunkSize;
}
module.exports = MinChunkSizePlugin;
MinChunkSizePlugin.prototype.apply = function(compiler) {
var minChunkSize = this.minChunkSize;
compiler.plugin("compilation", function(compilation) {
compilation.plugin("optimize-chunks", function(chunks) {
var argumentedChunks = chunks.map(function(chunk) {
return {
size: chunkSizeWithModules(chunk.modules),
entry: !!chunk.entry,
chunk: chunk
}
}).sort(function(a, b) {
if(a.entry != b.entry) {
return a.entry ? 1 : -1;
}
return a.size - b.size;
});
if(argumentedChunks.length > 0 && argumentedChunks[0].size < minChunkSize && !argumentedChunks[0].entry) {
for(var i = 1; i < argumentedChunks.length; i++) {
if(argumentedChunks[i].size + argumentedChunks[0].size >= minChunkSize)
break;
}
if(i == argumentedChunks.length) i = 1;
if(argumentedChunks[i]) {
argumentedChunks[i].chunk.integrate(argumentedChunks[0].chunk, "min-size");
chunks.splice(chunks.indexOf(argumentedChunks[0].chunk), 1);
this.restartApplyPlugins();
}
}
});
});
};