diff --git a/goldens/public-api/angular_devkit/build_angular/index.md b/goldens/public-api/angular_devkit/build_angular/index.md index 17af4715ee88..0d1f4a8aabcb 100644 --- a/goldens/public-api/angular_devkit/build_angular/index.md +++ b/goldens/public-api/angular_devkit/build_angular/index.md @@ -110,6 +110,7 @@ export interface DevServerBuilderOptions { allowedHosts?: string[]; browserTarget: string; disableHostCheck?: boolean; + forceEsbuild?: boolean; headers?: { [key: string]: string; }; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts index 00139f0235d8..296df5a4faa8 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts @@ -45,7 +45,10 @@ export function execute( return defer(() => initialize(options, projectName, context)).pipe( switchMap(({ builderName, normalizedOptions }) => { // Use vite-based development server for esbuild-based builds - if (builderName === '@angular-devkit/build-angular:browser-esbuild') { + if ( + builderName === '@angular-devkit/build-angular:browser-esbuild' || + normalizedOptions.forceEsbuild + ) { return defer(() => import('./vite-server')).pipe( switchMap(({ serveWithVite }) => serveWithVite(normalizedOptions, builderName, context)), ); @@ -95,6 +98,13 @@ case. ); } + if (normalizedOptions.forceEsbuild && !builderName.startsWith('@angular-devkit/build-angular:')) { + context.logger.warn( + 'Warning: Forcing the use of the esbuild-based build system with third-party builders' + + ' may cause unexpected behavior and/or build failures.', + ); + } + normalizedOptions.port = await checkPort(normalizedOptions.port, normalizedOptions.host); return { builderName, normalizedOptions }; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts index 4d06e3be1cc9..55bb233ca2a8 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/options.ts @@ -55,6 +55,7 @@ export async function normalizeOptions( ssl, sslCert, sslKey, + forceEsbuild, } = options; // Return all the normalized options @@ -80,5 +81,6 @@ export async function normalizeOptions( ssl, sslCert, sslKey, + forceEsbuild, }; } diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json b/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json index 58bc9f68948f..28760e6e2587 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json @@ -95,6 +95,11 @@ "poll": { "type": "number", "description": "Enable and define the file watching poll time period in milliseconds." + }, + "forceEsbuild": { + "type": "boolean", + "description": "Force the development server to use the 'browser-esbuild' builder when building. This is a developer preview option for the esbuild-based build system.", + "default": false } }, "additionalProperties": false,