add dependencies to ProgressPlugin
include module dependencies in module progress improve progress percentage calculation
This commit is contained in:
parent
8fb1269cf1
commit
552ca1e3b9
|
@ -19,6 +19,14 @@ export interface ProgressPluginOptions {
|
|||
* Show active modules count and one active module in progress message
|
||||
*/
|
||||
activeModules?: boolean;
|
||||
/**
|
||||
* Show dependencies count in progress message
|
||||
*/
|
||||
dependencies?: boolean;
|
||||
/**
|
||||
* Minimum dependencies count to start with. For better progress calculation. Default: 10000
|
||||
*/
|
||||
dependenciesCount?: number;
|
||||
/**
|
||||
* Show entries count in progress message
|
||||
*/
|
||||
|
@ -32,7 +40,7 @@ export interface ProgressPluginOptions {
|
|||
*/
|
||||
modules?: boolean;
|
||||
/**
|
||||
* Minimum modules count to start with. Only for mode=modules. Default: 500
|
||||
* Minimum modules count to start with. For better progress calculation. Default: 5000
|
||||
*/
|
||||
modulesCount?: number;
|
||||
/**
|
||||
|
|
|
@ -14,6 +14,10 @@ const MultiCompiler = require("./MultiCompiler");
|
|||
/** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginArgument} ProgressPluginArgument */
|
||||
/** @typedef {import("../declarations/plugins/ProgressPlugin").ProgressPluginOptions} ProgressPluginOptions */
|
||||
|
||||
const median3 = (a, b, c) => {
|
||||
return a + b + c - Math.max(a, b, c) - Math.min(a, b, c);
|
||||
};
|
||||
|
||||
const createDefaultHandler = (profile, logger) => {
|
||||
let lastState;
|
||||
let lastStateTime;
|
||||
|
@ -90,8 +94,10 @@ class ProgressPlugin {
|
|||
this.profile = options.profile;
|
||||
this.handler = options.handler;
|
||||
this.modulesCount = options.modulesCount;
|
||||
this.dependenciesCount = options.dependenciesCount;
|
||||
this.showEntries = options.entries;
|
||||
this.showModules = options.modules;
|
||||
this.showDependencies = options.dependencies;
|
||||
this.showActiveModules = options.activeModules;
|
||||
}
|
||||
|
||||
|
@ -140,16 +146,19 @@ class ProgressPlugin {
|
|||
* @returns {void}
|
||||
*/
|
||||
_applyOnCompiler(compiler, handler) {
|
||||
const { modulesCount } = this;
|
||||
const showEntries = this.showEntries;
|
||||
const showModules = this.showModules;
|
||||
const showDependencies = this.showDependencies;
|
||||
const showActiveModules = this.showActiveModules;
|
||||
let lastActiveModule = "";
|
||||
let lastModulesCount = 0;
|
||||
let lastModulesCount = this.modulesCount;
|
||||
let lastDependenciesCount = this.dependenciesCount;
|
||||
let lastEntriesCount = 0;
|
||||
let moduleCount = modulesCount;
|
||||
let modulesCount = 0;
|
||||
let dependenciesCount = 0;
|
||||
let entriesCount = 1;
|
||||
let doneModules = 0;
|
||||
let doneDependencies = 0;
|
||||
let doneEntries = 0;
|
||||
const activeModules = new Set();
|
||||
let lastUpdate = 0;
|
||||
|
@ -162,16 +171,24 @@ class ProgressPlugin {
|
|||
/** @type {string[]} */
|
||||
const items = [];
|
||||
const percentByModules =
|
||||
doneModules / Math.max(lastModulesCount, moduleCount);
|
||||
doneModules / Math.max(lastModulesCount, modulesCount);
|
||||
const percentByEntries =
|
||||
doneEntries / Math.max(lastEntriesCount, entriesCount);
|
||||
const percentByDependencies =
|
||||
doneDependencies / Math.max(lastDependenciesCount, dependenciesCount);
|
||||
const percentage =
|
||||
0.1 + Math.max(percentByModules, percentByEntries) * 0.6;
|
||||
0.1 +
|
||||
median3(percentByModules, percentByEntries, percentByDependencies) *
|
||||
0.6;
|
||||
|
||||
if (showEntries) {
|
||||
items.push(`${doneEntries}/${entriesCount} entries`);
|
||||
}
|
||||
if (showDependencies) {
|
||||
items.push(`${doneDependencies}/${dependenciesCount} dependencies`);
|
||||
}
|
||||
if (showModules) {
|
||||
items.push(`${doneModules}/${moduleCount} modules`);
|
||||
items.push(`${doneModules}/${modulesCount} modules`);
|
||||
}
|
||||
if (showActiveModules) {
|
||||
items.push(`${activeModules.size} active`);
|
||||
|
@ -181,9 +198,19 @@ class ProgressPlugin {
|
|||
lastUpdate = Date.now();
|
||||
};
|
||||
|
||||
const moduleAdd = module => {
|
||||
moduleCount++;
|
||||
if (moduleCount % 100 === 0) updateThrottled();
|
||||
const factorizeAdd = () => {
|
||||
dependenciesCount++;
|
||||
if (dependenciesCount % 100 === 0) updateThrottled();
|
||||
};
|
||||
|
||||
const factorizeDone = () => {
|
||||
doneDependencies++;
|
||||
if (doneDependencies % 100 === 0) updateThrottled();
|
||||
};
|
||||
|
||||
const moduleAdd = () => {
|
||||
modulesCount++;
|
||||
if (modulesCount % 100 === 0) updateThrottled();
|
||||
};
|
||||
|
||||
const moduleBuild = module => {
|
||||
|
@ -228,17 +255,29 @@ class ProgressPlugin {
|
|||
|
||||
compiler.hooks.compilation.tap("ProgressPlugin", compilation => {
|
||||
if (compilation.compiler.isChild()) return;
|
||||
lastModulesCount = moduleCount;
|
||||
lastModulesCount = modulesCount;
|
||||
lastEntriesCount = entriesCount;
|
||||
moduleCount = entriesCount = 0;
|
||||
doneModules = doneEntries = 0;
|
||||
lastDependenciesCount = dependenciesCount;
|
||||
modulesCount = dependenciesCount = entriesCount = 0;
|
||||
doneModules = doneDependencies = doneEntries = 0;
|
||||
handler(0, "compiling");
|
||||
|
||||
compilation.factorizeQueue.hooks.added.tap(
|
||||
"ProgressPlugin",
|
||||
factorizeAdd
|
||||
);
|
||||
compilation.factorizeQueue.hooks.result.tap(
|
||||
"ProgressPlugin",
|
||||
factorizeDone
|
||||
);
|
||||
|
||||
compilation.addModuleQueue.hooks.added.tap("ProgressPlugin", moduleAdd);
|
||||
compilation.processDependenciesQueue.hooks.result.tap(
|
||||
"ProgressPlugin",
|
||||
moduleDone
|
||||
);
|
||||
|
||||
compilation.hooks.buildModule.tap("ProgressPlugin", moduleBuild);
|
||||
compilation.hooks.failedModule.tap("ProgressPlugin", moduleDone);
|
||||
compilation.hooks.succeedModule.tap("ProgressPlugin", moduleDone);
|
||||
compilation.hooks.stillValidModule.tap("ProgressPlugin", moduleDone);
|
||||
|
||||
compilation.hooks.addEntry.tap("ProgressPlugin", entryAdd);
|
||||
compilation.hooks.failedEntry.tap("ProgressPlugin", entryDone);
|
||||
|
@ -341,8 +380,10 @@ class ProgressPlugin {
|
|||
|
||||
ProgressPlugin.defaultOptions = {
|
||||
profile: false,
|
||||
modulesCount: 500,
|
||||
modulesCount: 5000,
|
||||
dependenciesCount: 10000,
|
||||
modules: true,
|
||||
dependencies: true,
|
||||
activeModules: false,
|
||||
entries: true
|
||||
};
|
||||
|
|
|
@ -13,6 +13,14 @@
|
|||
"description": "Show active modules count and one active module in progress message",
|
||||
"type": "boolean"
|
||||
},
|
||||
"dependencies": {
|
||||
"description": "Show dependencies count in progress message",
|
||||
"type": "boolean"
|
||||
},
|
||||
"dependenciesCount": {
|
||||
"description": "Minimum dependencies count to start with. For better progress calculation. Default: 10000",
|
||||
"type": "number"
|
||||
},
|
||||
"entries": {
|
||||
"description": "Show entries count in progress message",
|
||||
"type": "boolean"
|
||||
|
@ -30,7 +38,7 @@
|
|||
"type": "boolean"
|
||||
},
|
||||
"modulesCount": {
|
||||
"description": "Minimum modules count to start with. Only for mode=modules. Default: 500",
|
||||
"description": "Minimum modules count to start with. For better progress calculation. Default: 5000",
|
||||
"type": "number"
|
||||
},
|
||||
"profile": {
|
||||
|
|
|
@ -41,7 +41,7 @@ describe("ProgressPlugin", function() {
|
|||
"trims each detail string equally"
|
||||
);
|
||||
expect(logs).toContain(
|
||||
"10% ...ding ...ries ...ules ...tive",
|
||||
"10% ...ding ...ries ...cies ...ules",
|
||||
"remove empty arguments and omit arguments when no space"
|
||||
);
|
||||
expect(logs).toContain("92% after chunk asset optimization");
|
||||
|
|
Loading…
Reference in New Issue