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