From 28c27567cf90712e6c8f4d483bcc0e0fc683ee9b Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 11 Apr 2023 16:21:14 -0400 Subject: [PATCH] perf(@angular-devkit/build-angular): asynchronously delete output path in esbuild builder When using the esbuild-based browser application builder, the output path is deleted prior to performing a build to ensure a clean output with only the built files. The deletion will now be performed asynchronously using the Node.js promised-based API. This should provide a small performance improvement for projects with large output directories. (cherry picked from commit df49c359de9489ab1e93246d41f571034af900e4) --- .../build_angular/src/builders/browser-esbuild/index.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/builders/browser-esbuild/index.ts b/packages/angular_devkit/build_angular/src/builders/browser-esbuild/index.ts index 46df6216f689..2a8a61780486 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser-esbuild/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser-esbuild/index.ts @@ -12,7 +12,6 @@ import assert from 'node:assert'; import { constants as fsConstants } from 'node:fs'; import fs from 'node:fs/promises'; import path from 'node:path'; -import { deleteOutputDir } from '../../utils'; import { copyAssets } from '../../utils/copy-assets'; import { assertIsError } from '../../utils/error'; import { transformSupportedBrowsersToTargets } from '../../utils/esbuild-targets'; @@ -623,7 +622,13 @@ export async function* buildEsbuildBrowser( if (shouldWriteResult) { // Clean output path if enabled if (userOptions.deleteOutputPath) { - deleteOutputDir(normalizedOptions.workspaceRoot, userOptions.outputPath); + if (normalizedOptions.outputPath === normalizedOptions.workspaceRoot) { + context.logger.error('Output path MUST not be workspace root directory!'); + + return; + } + + await fs.rm(normalizedOptions.outputPath, { force: true, recursive: true, maxRetries: 3 }); } // Create output directory if needed