mirror of https://github.com/webpack/webpack.git
53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
/*
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
Author Tobias Koppers @sokra
|
|
*/
|
|
function CommonsChunkPlugin(filenameTemplate, minCount) {
|
|
this.filenameTemplate = filenameTemplate;
|
|
this.minCount = minCount || 2;
|
|
}
|
|
module.exports = CommonsChunkPlugin;
|
|
CommonsChunkPlugin.prototype.apply = function(compiler) {
|
|
var filenameTemplate = this.filenameTemplate;
|
|
var minCount = this.minCount;
|
|
compiler.plugin("compilation", function(compilation) {
|
|
compilation.plugin("optimize-chunks", function(chunks) {
|
|
var commonModulesCount = [];
|
|
var commonModules = [];
|
|
chunks.forEach(function(chunk) {
|
|
if(chunk.entry) {
|
|
chunk.modules.forEach(function(module) {
|
|
var idx = commonModules.indexOf(module);
|
|
if(idx < 0) {
|
|
commonModules.push(module);
|
|
commonModulesCount.push(1);
|
|
} else {
|
|
commonModulesCount[idx]++;
|
|
}
|
|
});
|
|
}
|
|
});
|
|
var commonChunk = this.addChunk();
|
|
commonModulesCount.forEach(function(count, idx) {
|
|
if(count >= minCount) {
|
|
var module = commonModules[idx];
|
|
module.chunks.slice().forEach(function(chunk) {
|
|
module.removeChunk(chunk);
|
|
});
|
|
commonChunk.addModule(module);
|
|
module.addChunk(commonChunk);
|
|
}
|
|
});
|
|
chunks.forEach(function(chunk) {
|
|
if(chunk.entry) {
|
|
chunk.parents = [commonChunk];
|
|
commonChunk.chunks.push(chunk);
|
|
chunk.entry = false;
|
|
}
|
|
});
|
|
commonChunk.entry = true;
|
|
commonChunk.id = 0;
|
|
commonChunk.filenameTemplate = filenameTemplate;
|
|
});
|
|
});
|
|
}; |