|
| 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