mirror of https://github.com/webpack/webpack.git
52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
/*
|
|
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[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();
|
|
}
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|