Skip to content

Commit 057ba0c

Browse files
committed
perf(@ngtools/webpack): rebuild Angular required files asynchronously
This change adjusts the Angular required files rebuilding logic to not block on each individual file's Webpack module rebuild. Now all required Webpack modules are discovered then rebuilt asynchrounously and only blocked on the full list of rebuilds. The promise-based Webpack rebuild function is also now only created if a rebuild is required. (cherry picked from commit f62b042)
1 parent 3a23130 commit 057ba0c

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

packages/ngtools/webpack/src/ivy/plugin.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -331,9 +331,6 @@ export class AngularWebpackPlugin {
331331
return;
332332
}
333333

334-
const rebuild = (webpackModule: Module) =>
335-
new Promise<void>((resolve) => compilation.rebuildModule(webpackModule, () => resolve()));
336-
337334
const filesToRebuild = new Set<string>();
338335
for (const requiredFile of this.requiredFilesToEmit) {
339336
const history = this.fileEmitHistory.get(requiredFile);
@@ -356,12 +353,17 @@ export class AngularWebpackPlugin {
356353
}
357354

358355
if (filesToRebuild.size > 0) {
359-
for (const webpackModule of [...modules]) {
356+
const rebuild = (webpackModule: Module) =>
357+
new Promise<void>((resolve) => compilation.rebuildModule(webpackModule, () => resolve()));
358+
359+
const modulesToRebuild = [];
360+
for (const webpackModule of modules) {
360361
const resource = (webpackModule as NormalModule).resource;
361362
if (resource && filesToRebuild.has(normalizePath(resource))) {
362-
await rebuild(webpackModule);
363+
modulesToRebuild.push(webpackModule);
363364
}
364365
}
366+
await Promise.all(modulesToRebuild.map((webpackModule) => rebuild(webpackModule)));
365367
}
366368

367369
this.requiredFilesToEmit.clear();

0 commit comments

Comments
 (0)