Skip to content

Commit 353442d

Browse files
authored
Merge pull request webpack#6112 from webpack/feature/progress-plugin
improve ProgressPlugin
2 parents d24c64c + 96d9163 commit 353442d

File tree

4 files changed

+113
-35
lines changed

4 files changed

+113
-35
lines changed

lib/ProgressPlugin.js

Lines changed: 82 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -136,45 +136,92 @@ class ProgressPlugin {
136136
compilation.hooks.failedModule.tap("ProgressPlugin", moduleDone);
137137
compilation.hooks.succeedModule.tap("ProgressPlugin", moduleDone);
138138
const hooks = {
139-
"seal": [0.71, "sealing"],
140-
"optimize": [0.72, "optimizing"],
141-
"optimizeModulesBasic": [0.73, "basic module optimization"],
142-
"optimizeModules": [0.74, "module optimization"],
143-
"optimizeModulesAdvanced": [0.75, "advanced module optimization"],
144-
"optimizeChunksBasic": [0.76, "basic chunk optimization"],
145-
"optimizeChunks": [0.77, "chunk optimization"],
146-
"optimizeChunksAdvanced": [0.78, "advanced chunk optimization"],
147-
"optimizeTree": [0.79, "module and chunk tree optimization"],
148-
"optimizeChunkModules": [0.80, "chunk modules optimization"],
149-
"optimizeChunkModulesAdvanced": [0.81, "advanced chunk modules optimization"],
150-
"reviveModules": [0.82, "module reviving"],
151-
"optimizeModuleOrder": [0.83, "module order optimization"],
152-
"optimizeModuleIds": [0.84, "module id optimization"],
153-
"reviveChunks": [0.85, "chunk reviving"],
154-
"optimizeChunkOrder": [0.86, "chunk order optimization"],
155-
"optimizeChunkIds": [0.87, "chunk id optimization"],
156-
"beforeHash": [0.88, "hashing"],
157-
"beforeModuleAssets": [0.89, "module assets processing"],
158-
"beforeChunkAssets": [0.90, "chunk assets processing"],
159-
"additionalChunkAssets": [0.91, "additional chunk assets processing"],
160-
"additionalAssets": [0.91, "additional asset processing"],
161-
"optimizeChunkAssets": [0.92, "chunk asset optimization"],
162-
"optimizeAssets": [0.94, "asset optimization"],
163-
"record": [0.92, "recording"]
139+
finishModules: "finish module graph",
140+
seal: "sealing",
141+
optimizeDependenciesBasic: "basic dependencies optimization",
142+
optimizeDependencies: "dependencies optimization",
143+
optimizeDependenciesAdvanced: "advanced dependencies optimization",
144+
afterOptimizeDependencies: "after dependencies optimization",
145+
optimize: "optimizing",
146+
optimizeModulesBasic: "basic module optimization",
147+
optimizeModules: "module optimization",
148+
optimizeModulesAdvanced: "advanced module optimization",
149+
afterOptimizeModules: "after module optimization",
150+
optimizeChunksBasic: "basic chunk optimization",
151+
optimizeChunks: "chunk optimization",
152+
optimizeChunksAdvanced: "advanced chunk optimization",
153+
afterOptimizeChunks: "after chunk optimization",
154+
optimizeTree: "module and chunk tree optimization",
155+
afterOptimizeTree: "after module and chunk tree optimization",
156+
optimizeChunkModulesBasic: "basic chunk modules optimization",
157+
optimizeChunkModules: "chunk modules optimization",
158+
optimizeChunkModulesAdvanced: "advanced chunk modules optimization",
159+
afterOptimizeChunkModules: "after chunk modules optimization",
160+
reviveModules: "module reviving",
161+
optimizeModuleOrder: "module order optimization",
162+
advancedOptimizeModuleOrder: "advanced module order optimization",
163+
beforeModuleIds: "before module ids",
164+
moduleIds: "module ids",
165+
optimizeModuleIds: "module id optimization",
166+
afterOptimizeModuleIds: "module id optimization",
167+
reviveChunks: "chunk reviving",
168+
optimizeChunkOrder: "chunk order optimization",
169+
beforeChunkIds: "before chunk ids",
170+
optimizeChunkIds: "chunk id optimization",
171+
afterOptimizeChunkIds: "after chunk id optimization",
172+
recordModules: "record modules",
173+
recordChunks: "record chunks",
174+
beforeHash: "hashing",
175+
afterHash: "after hashing",
176+
recordHash: "record hash",
177+
beforeModuleAssets: "module assets processing",
178+
beforeChunkAssets: "chunk assets processing",
179+
additionalChunkAssets: "additional chunk assets processing",
180+
record: "recording",
181+
additionalAssets: "additional asset processing",
182+
optimizeChunkAssets: "chunk asset optimization",
183+
afterOptimizeChunkAssets: "after chunk asset optimization",
184+
optimizeAssets: "asset optimization",
185+
afterOptimizeAssets: "after asset optimization",
186+
afterSeal: "after seal"
164187
};
165-
Object.keys(hooks).forEach(name => {
166-
let pass = 0;
167-
const settings = hooks[name];
168-
compilation.hooks[name].tap("ProgressPlugin", () => {
169-
if(pass++ > 0)
170-
handler(settings[0], settings[1], `pass ${pass}`);
171-
else
172-
handler(settings[0], settings[1]);
188+
const numberOfHooks = Object.keys(hooks).length;
189+
Object.keys(hooks).forEach((name, idx) => {
190+
const title = hooks[name];
191+
const percentage = idx / numberOfHooks * 0.25 + 0.7;
192+
compilation.hooks[name].intercept({
193+
name: "ProgressPlugin",
194+
context: true,
195+
call: () => {
196+
handler(percentage, title);
197+
},
198+
tap: (context, tap) => {
199+
if(context) {
200+
// p is percentage from 0 to 1
201+
// args is any number of messages in a hierarchical matter
202+
context.reportProgress = (p, ...args) => {
203+
handler(percentage, title, tap.name, ...args);
204+
};
205+
}
206+
handler(percentage, title, tap.name);
207+
}
173208
});
174209
});
175210
});
176-
compiler.hooks.emit.tap("ProgressPlugin", () => {
177-
handler(0.95, "emitting");
211+
compiler.hooks.emit.intercept({
212+
name: "ProgressPlugin",
213+
context: true,
214+
call: () => {
215+
handler(0.95, "emitting");
216+
},
217+
tap: (context, tap) => {
218+
if(context) {
219+
context.reportProgress = (p, ...args) => {
220+
handler(0.95, "emitting", tap.name, ...args);
221+
};
222+
}
223+
handler(0.95, "emitting", tap.name);
224+
}
178225
});
179226
compiler.hooks.done.tap("ProgressPlugin", () => {
180227
handler(1, "");
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = [];
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
it("should contain the custom progres messages", function() {
2+
var data = require(__dirname + "/data");
3+
data.should.containEql("optimizing");
4+
data.should.containEql("optimizing|CustomPlugin");
5+
data.should.containEql("optimizing|CustomPlugin|custom category|custom message");
6+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var webpack = require("../../../../");
2+
var data = require("./data");
3+
module.exports = {
4+
externals: {
5+
[__dirname + "/data"]: "commonjs " + __dirname + "/data"
6+
},
7+
plugins: [
8+
new webpack.ProgressPlugin((value, ...messages) => {
9+
data.push(messages.join("|"));
10+
}),
11+
{
12+
apply: (compiler) => {
13+
compiler.hooks.compilation.tap("CustomPlugin", compilation => {
14+
compilation.hooks.optimize.tap({
15+
name: "CustomPlugin",
16+
context: true
17+
}, (context) => {
18+
context.reportProgress(0, "custom category", "custom message");
19+
});
20+
});
21+
}
22+
}
23+
]
24+
};

0 commit comments

Comments
 (0)