Merge pull request #7812 from webpack/feature/orphan_modules

Hide orphan modules in Stats
This commit is contained in:
Tobias Koppers 2018-08-09 21:12:20 +02:00 committed by GitHub
commit d12e283ba1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 47 additions and 22 deletions

View File

@ -173,6 +173,10 @@ class Stats {
options.nestedModules,
true
);
const showOrphanModules = optionOrLocalFallback(
options.orphanModules,
false
);
const showModuleAssets = optionOrLocalFallback(
options.moduleAssets,
!forToString
@ -225,16 +229,22 @@ class Stats {
!forToString
);
if (!showOrphanModules) {
excludeModules.push((ident, module, type) => {
return module.getNumberOfChunks() === 0 && type !== "nested";
});
}
if (!showCachedModules) {
excludeModules.push((ident, module) => !module.built);
}
const createModuleFilter = () => {
const createModuleFilter = type => {
let i = 0;
return module => {
if (excludeModules.length > 0) {
const ident = requestShortener.shorten(module.resource);
const excluded = excludeModules.some(fn => fn(ident, module));
const excluded = excludeModules.some(fn => fn(ident, module, type));
if (excluded) return false;
}
const result = i < maxModules;
@ -492,7 +502,7 @@ class Stats {
obj.namedChunkGroups = fnChunkGroup(compilation.namedChunkGroups);
}
const fnModule = module => {
const fnModule = (module, nested) => {
const path = [];
const issuer = module.getIssuer(moduleGraph);
let current = issuer;
@ -529,6 +539,9 @@ class Stats {
errors: module.errors ? module.errors.length : 0,
warnings: module.warnings ? module.warnings.length : 0
};
if (showOrphanModules && !nested) {
obj.orphan = module.getNumberOfChunks() === 0;
}
if (showModuleAssets) {
obj.assets = Object.keys(module.buildInfo.assets || {});
}
@ -612,8 +625,8 @@ class Stats {
const modules = module.modules;
obj.modules = modules
.sort(sortByField("depth"))
.filter(createModuleFilter())
.map(fnModule);
.filter(createModuleFilter("nested"))
.map(m => fnModule(m, true));
obj.filteredModules = modules.length - obj.modules.length;
obj.modules.sort(sortByField(sortModules));
}
@ -664,8 +677,8 @@ class Stats {
obj.modules = chunk
.getModules()
.sort(sortByField("depth"))
.filter(createModuleFilter())
.map(fnModule);
.filter(createModuleFilter("chunk"))
.map(m => fnModule(m));
obj.filteredModules = chunk.getNumberOfModules() - obj.modules.length;
obj.modules.sort(sortByField(sortModules));
}
@ -713,8 +726,8 @@ class Stats {
obj.modules = compilation.modules
.slice()
.sort(sortByField("depth"))
.filter(createModuleFilter())
.map(fnModule);
.filter(createModuleFilter("module"))
.map(m => fnModule(m));
obj.filteredModules = compilation.modules.length - obj.modules.length;
obj.modules.sort(sortByField(sortModules));
}
@ -1036,6 +1049,9 @@ class Stats {
if (module.cacheable === false) {
colors.red(" [not cacheable]");
}
if (module.orphan) {
colors.yellow(" [orphan]");
}
if (module.optional) {
colors.yellow(" [optional]");
}

View File

@ -1844,6 +1844,10 @@
"type": "boolean",
"description": "add built modules information"
},
"orphanModules": {
"type": "boolean",
"description": "add information about orphan modules"
},
"nestedModules": {
"type": "boolean",
"description": "add information about modules nested in other modules (like with module concatenation)"
@ -1858,7 +1862,7 @@
},
"cached": {
"type": "boolean",
"description": "add also information about cached (not built) modules"
"description": "add information about cached (not built) modules"
},
"cachedAssets": {
"type": "boolean",

View File

@ -679,15 +679,15 @@ exports[`StatsTestCases should print correct stats for concat-and-sideeffects 1`
| ./index.js 46 bytes [built]
| ./node_modules/pmodule/a.js 49 bytes [built]
| ./node_modules/pmodule/aa.js 24 bytes [built]
./node_modules/pmodule/index.js 63 bytes [built]
./node_modules/pmodule/index.js 63 bytes [orphan] [built]
ModuleConcatenation bailout: Module is not in any chunk
./node_modules/pmodule/b.js 49 bytes [built]
./node_modules/pmodule/b.js 49 bytes [orphan] [built]
ModuleConcatenation bailout: Module is not in any chunk
./node_modules/pmodule/c.js 49 bytes [built]
./node_modules/pmodule/c.js 49 bytes [orphan] [built]
ModuleConcatenation bailout: Module is not in any chunk
./node_modules/pmodule/bb.js 24 bytes [built]
./node_modules/pmodule/bb.js 24 bytes [orphan] [built]
ModuleConcatenation bailout: Module is not in any chunk
./node_modules/pmodule/cc.js 24 bytes [built]
./node_modules/pmodule/cc.js 24 bytes [orphan] [built]
ModuleConcatenation bailout: Module is not in any chunk"
`;
@ -1097,7 +1097,7 @@ entry.js 8.46 KiB 0 [emitted] entry
Entrypoint entry = entry.js
[0] ./entry.js 120 bytes {0} [built]
[1] ./modules/b.js 22 bytes {1} [built]
./modules/a.js 37 bytes [built]"
+ 1 hidden module"
`;
exports[`StatsTestCases should print correct stats for import-with-invalid-options-comments 1`] = `
@ -2247,20 +2247,20 @@ Entrypoint main = main.js
| ./components/src/CompAB/CompB.js 77 bytes [built]
| [only some exports used: default]
| harmony import specifier ./components ./main.js 4:15-20 (skipped side-effect-free modules)
./components/src/index.js 84 bytes [built]
./components/src/index.js 84 bytes [orphan] [built]
[module unused]
harmony side effect evaluation ./components [2] ./foo.js 1:0-37
harmony side effect evaluation ./components [3] ./main.js + 1 modules 1:0-44
./components/src/CompAB/index.js 87 bytes [built]
./components/src/CompAB/index.js 87 bytes [orphan] [built]
[module unused]
harmony side effect evaluation ./CompAB ./components/src/index.js 1:0-40
harmony export imported specifier ./CompAB ./components/src/index.js 1:0-40
harmony export imported specifier ./CompAB ./components/src/index.js 1:0-40
./components/src/CompC/index.js 34 bytes [built]
./components/src/CompC/index.js 34 bytes [orphan] [built]
[module unused]
harmony side effect evaluation ./CompC ./components/src/index.js 2:0-43
harmony export imported specifier ./CompC ./components/src/index.js 2:0-43
./components/src/CompC/CompC.js 33 bytes [built]
./components/src/CompC/CompC.js 33 bytes [orphan] [built]
[module unused]
harmony side effect evaluation ./CompC ./components/src/CompC/index.js 1:0-34
harmony export imported specifier ./CompC ./components/src/CompC/index.js 1:0-34"
@ -2285,11 +2285,11 @@ Entrypoint main = main.js
| ./node_modules/pmodule/c.js 28 bytes [built]
| [only some exports used: z]
| harmony import specifier pmodule ./index.js 3:17-18 (skipped side-effect-free modules)
./node_modules/pmodule/a.js 60 bytes [built]
./node_modules/pmodule/a.js 60 bytes [orphan] [built]
[module unused]
harmony side effect evaluation ./a [0] ./index.js + 2 modules 1:0-20
harmony export imported specifier ./a [0] ./index.js + 2 modules 1:0-20
./node_modules/pmodule/b.js 69 bytes [built]
./node_modules/pmodule/b.js 69 bytes [orphan] [built]
[module unused]
harmony side effect evaluation ./b [0] ./index.js + 2 modules 2:0-30
harmony export imported specifier ./b [0] ./index.js + 2 modules 2:0-30

View File

@ -6,6 +6,7 @@ module.exports = {
all: false,
modules: true,
nestedModules: true,
orphanModules: true,
optimizationBailout: true
}
};

View File

@ -12,6 +12,7 @@ module.exports = {
externals: ["external"],
stats: {
assets: false,
orphanModules: true,
optimizationBailout: true
}
};

View File

@ -55,6 +55,7 @@ module.exports = [
},
stats: {
assets: false,
orphanModules: true,
optimizationBailout: true
}
}

View File

@ -7,6 +7,7 @@ module.exports = {
concatenateModules: true
},
stats: {
orphanModules: true,
nestedModules: true,
usedExports: true,
reasons: true

View File

@ -3,6 +3,7 @@ module.exports = {
optimization: { moduleIds: "natural", chunkIds: "natural" },
entry: "./index",
stats: {
orphanModules: true,
nestedModules: true,
usedExports: true,
reasons: true