diff --git a/bin/webpack.js b/bin/webpack.js index d743a6c20..b5dd38b88 100755 --- a/bin/webpack.js +++ b/bin/webpack.js @@ -34,6 +34,10 @@ optimist .boolean("hide-modules").describe("hide-modules") + .string("display-exclude").describe("display-exclude") + + .boolean("display-modules").describe("display-modules") + .boolean("display-chunks").describe("display-chunks") .boolean("display-error-details").describe("display-error-details") @@ -89,6 +93,10 @@ ifArg("sort-assets-by", function(value) { outputOptions.assetsSort = value; }); +ifArg("display-exclude", function(value) { + outputOptions.exclude = value; +}); + if(!outputOptions.json) { ifArg("display-chunks", function(bool) { outputOptions.modules = !bool; @@ -116,6 +124,9 @@ if(!outputOptions.json) { if(bool) outputOptions.cachedAssets = true; }); + + if(!outputOptions.exclude && !argv["display-modules"]) + outputOptions.exclude = ["node_modules", "bower_components", "jam", "components"]; } else { outputOptions.chunks = true; outputOptions.modules = true; diff --git a/lib/Stats.js b/lib/Stats.js index 0bd0c5f3a..b5e3df1ad 100644 --- a/lib/Stats.js +++ b/lib/Stats.js @@ -37,9 +37,25 @@ Stats.prototype.toJson = function toJson(options, forToString) { var showChildren = d(options.children, true); var showSource = d(options.source, !forToString); var showErrorDetails = d(options.errorDetails, !forToString); + var excludeModules = [].concat(d(options.exclude, [])).map(function(str) { + if(typeof str !== "string") return str; + return new RegExp("[\\\\/]" + str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "([\\\\/]|$|!|\\?)"); + }); var sortModules = d(options.modulesSort, "id"); var sortChunks = d(options.chunksSort, "id"); var sortAssets = d(options.assetsSort, ""); + + function moduleFilter(module) { + if(!showCachedModules && !module.built) { + return false; + } + if(excludeModules.length === 0) + return true; + var ident = module.identifier(); + return !excludeModules.some(function(regExp) { + return regExp.test(ident); + }); + } function sortByField(field) { if(!field) return function() { return 0; } @@ -184,12 +200,8 @@ Stats.prototype.toJson = function toJson(options, forToString) { }) }; if(showChunkModules) { - obj.modules = chunk.modules.map(fnModule); - if(!showCachedModules) { - obj.modules = obj.modules.filter(function(m) { - return m.built; - }); - } + obj.modules = chunk.modules.filter(moduleFilter).map(fnModule); + obj.filteredModules = chunk.modules.length - obj.modules.length; obj.modules.sort(sortByField(sortModules)); } if(showChunkOrigins) { @@ -211,12 +223,8 @@ Stats.prototype.toJson = function toJson(options, forToString) { obj.chunks.sort(sortByField(sortChunks)); } if(showModules) { - obj.modules = compilation.modules.map(fnModule); - if(!showCachedModules) { - obj.modules = obj.modules.filter(function(m) { - return m.built; - }); - } + obj.modules = compilation.modules.filter(moduleFilter).map(fnModule); + obj.filteredModules = compilation.modules.length - obj.modules.length; obj.modules.sort(sortByField(sortModules)); } if(showChildren) { @@ -523,6 +531,10 @@ Stats.jsonToString = function jsonToString(obj, useColors) { } processProfile(module); }); + if(chunk.filteredModules > 0) { + normal(" + " + chunk.filteredModules + " hidden modules"); + newline(); + } } }); } @@ -557,6 +569,10 @@ Stats.jsonToString = function jsonToString(obj, useColors) { } processProfile(module); }); + if(obj.filteredModules > 0) { + normal(" + " + obj.filteredModules + " hidden modules"); + newline(); + } } if(obj.warnings) { obj.warnings.forEach(function(warning) {