Skip to content

Commit b203378

Browse files
committed
refactor(@ngtools/webpack): limit Webpack module iteration when rebuilding
1 parent 9eb7fb5 commit b203378

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

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

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -294,23 +294,18 @@ export class AngularWebpackPlugin {
294294
}
295295

296296
private async rebuildRequiredFiles(
297-
modules: compilation.Module[],
297+
modules: Iterable<compilation.Module>,
298298
compilation: WebpackCompilation,
299299
fileEmitter: FileEmitter,
300-
) {
301-
const rebuild = (filename: string) =>
302-
new Promise<void>((resolve) => {
303-
const module = modules.find(
304-
({ resource }: compilation.Module & { resource?: string }) =>
305-
resource && normalizePath(resource) === filename,
306-
);
307-
if (!module) {
308-
resolve();
309-
} else {
310-
compilation.rebuildModule(module, resolve);
311-
}
312-
});
300+
): Promise<void> {
301+
if (this.requiredFilesToEmit.size === 0) {
302+
return;
303+
}
304+
305+
const rebuild = (webpackModule: compilation.Module) =>
306+
new Promise<void>((resolve) => compilation.rebuildModule(webpackModule, resolve));
313307

308+
const filesToRebuild = new Set<string>();
314309
for (const requiredFile of this.requiredFilesToEmit) {
315310
const history = this.fileEmitHistory.get(requiredFile);
316311
if (history) {
@@ -323,13 +318,23 @@ export class AngularWebpackPlugin {
323318
) {
324319
// New emit result is different so rebuild using new emit result
325320
this.requiredFilesToEmitCache.set(requiredFile, emitResult);
326-
await rebuild(requiredFile);
321+
filesToRebuild.add(requiredFile);
327322
}
328323
} else {
329324
// No emit history so rebuild
330-
await rebuild(requiredFile);
325+
filesToRebuild.add(requiredFile);
331326
}
332327
}
328+
329+
if (filesToRebuild.size > 0) {
330+
for (const webpackModule of [...modules]) {
331+
const resource = (webpackModule as compilation.Module & { resource?: string }).resource;
332+
if (resource && filesToRebuild.has(normalizePath(resource))) {
333+
await rebuild(webpackModule);
334+
}
335+
}
336+
}
337+
333338
this.requiredFilesToEmit.clear();
334339
this.requiredFilesToEmitCache.clear();
335340
}

0 commit comments

Comments
 (0)