Skip to content

Commit 0df6162

Browse files
committed
added MinChunkSizePlugin
1 parent 6d50b09 commit 0df6162

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

lib/WebpackOptionsApply.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var RequireContextPlugin = require("./dependencies/RequireContextPlugin");
2727
var RequireEnsurePlugin = require("./dependencies/RequireEnsurePlugin");
2828

2929
var LimitChunkCountPlugin = require("./optimize/LimitChunkCountPlugin");
30+
var MinChunkSizePlugin = require("./optimize/MinChunkSizePlugin");
3031
var RemoveParentModulesPlugin = require("./optimize/RemoveParentModulesPlugin");
3132
var RemoveEmptyChunksPlugin = require("./optimize/RemoveEmptyChunksPlugin");
3233
var MergeDuplicateChunksPlugin = require("./optimize/MergeDuplicateChunksPlugin");
@@ -92,6 +93,9 @@ WebpackOptionsApply.prototype.process = function(options, compiler) {
9293
new RemoveEmptyChunksPlugin(),
9394
new MergeDuplicateChunksPlugin()
9495
);
96+
if(options.optimize && options.optimize.minChunkSize)
97+
compiler.apply(new MinChunkSizePlugin(options.optimize.minChunkSize));
98+
9599
if(options.optimize && options.optimize.maxChunks)
96100
compiler.apply(new LimitChunkCountPlugin(options.optimize));
97101

lib/optimize/MinChunkSizePlugin.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
function chunkSizeWithModules(modules) {
6+
return modules.map(function(m) {
7+
return m.size();
8+
}).reduce(function(a, b) {
9+
return a + b;
10+
});
11+
}
12+
13+
function MinChunkSizePlugin(minChunkSize) {
14+
this.minChunkSize = minChunkSize;
15+
}
16+
module.exports = MinChunkSizePlugin;
17+
18+
MinChunkSizePlugin.prototype.apply = function(compiler) {
19+
var minChunkSize = this.minChunkSize;
20+
compiler.plugin("compilation", function(compilation) {
21+
compilation.plugin("optimize-chunks", function(chunks) {
22+
23+
var argumentedChunks = chunks.map(function(chunk) {
24+
return {
25+
size: chunkSizeWithModules(chunk.modules),
26+
entry: !!chunk.entry,
27+
chunk: chunk
28+
}
29+
}).sort(function(a, b) {
30+
if(a.entry != b.entry) {
31+
return a.entry ? 1 : -1;
32+
}
33+
return b.size - a.size;
34+
});
35+
36+
if(argumentedChunks[0].size < minChunkSize) {
37+
for(var i = 1; i < argumentedChunks.length; i++) {
38+
if(argumentedChunks[i].size + argumentedChunks[0].size >= minChunkSize)
39+
break;
40+
}
41+
if(i == argumentedChunks.length) i = 1;
42+
if(argumentedChunks[i]) {
43+
argumentedChunks[i].chunk.integrate(argumentedChunks[0].chunk, "min-size");
44+
chunks.splice(chunks.indexOf(argumentedChunks[0].chunk), 1);
45+
this.restartApplyPlugins();
46+
}
47+
}
48+
});
49+
});
50+
};
51+

0 commit comments

Comments
 (0)