diff --git a/.ng-dev/release.mjs b/.ng-dev/release.mjs index 4d4a4fc4b927..eb5aad2e4fcf 100644 --- a/.ng-dev/release.mjs +++ b/.ng-dev/release.mjs @@ -8,7 +8,25 @@ import { releasePackages } from '../scripts/packages.mts'; */ export const release = { representativeNpmPackage: '@angular/cli', - npmPackages: releasePackages.map(({ name, experimental }) => ({ name, experimental })), + npmPackages: releasePackages.map(({ name, experimental }) => { + if ( + name === '@angular-devkit/build-angular' || + name === '@angular-devkit/build-webpack' || + name === '@ngtools/webpack' + ) { + return { + name, + experimental, + deprecated: { + version: '>=22.0.0-next.0', + message: + 'Angular\'s Webpack support is deprecated. Use the esbuild and Vite-based "@angular/build" package instead.', + }, + }; + } + + return { name, experimental }; + }), buildPackages: async () => { // The `performNpmReleaseBuild` function is loaded at runtime to avoid loading additional // files and dependencies unless a build is required. diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index 2c1c5f4bf86a..06b61ab1fdcb 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -23,13 +23,13 @@ export class AngularNodeAppEngine { export interface AngularNodeAppEngineOptions extends AngularAppEngineOptions { } -// @public +// @public @deprecated export class CommonEngine { constructor(options?: CommonEngineOptions | undefined); render(opts: CommonEngineRenderOptions): Promise; } -// @public (undocumented) +// @public @deprecated (undocumented) export interface CommonEngineOptions { allowedHosts?: readonly string[]; bootstrap?: Type<{}> | ((context: BootstrapContext) => Promise); @@ -37,7 +37,7 @@ export interface CommonEngineOptions { providers?: StaticProvider[]; } -// @public (undocumented) +// @public @deprecated (undocumented) export interface CommonEngineRenderOptions { bootstrap?: Type<{}> | ((context: BootstrapContext) => Promise); // (undocumented) diff --git a/goldens/public-api/angular_devkit/build_webpack/index.api.md b/goldens/public-api/angular_devkit/build_webpack/index.api.md index 0d60187627d5..abe0725a36fe 100644 --- a/goldens/public-api/angular_devkit/build_webpack/index.api.md +++ b/goldens/public-api/angular_devkit/build_webpack/index.api.md @@ -40,14 +40,14 @@ export interface EmittedFiles { name?: string; } -// @public (undocumented) +// @public @deprecated (undocumented) export function runWebpack(config: webpack.Configuration, context: BuilderContext, options?: { logging?: WebpackLoggingCallback; webpackFactory?: WebpackFactory; shouldProvideStats?: boolean; }): Observable; -// @public (undocumented) +// @public @deprecated (undocumented) export function runWebpackDevServer(config: webpack.Configuration, context: BuilderContext, options?: { shouldProvideStats?: boolean; devServerConfig?: WebpackDevServer.Configuration; diff --git a/goldens/public-api/ngtools/webpack/index.api.md b/goldens/public-api/ngtools/webpack/index.api.md index 13ddc85cabd8..a2c25e8c74f5 100644 --- a/goldens/public-api/ngtools/webpack/index.api.md +++ b/goldens/public-api/ngtools/webpack/index.api.md @@ -8,14 +8,14 @@ import type { Compiler } from 'webpack'; import type { CompilerOptions } from '@angular/compiler-cli'; import type { LoaderContext } from 'webpack'; -// @public (undocumented) +// @public @deprecated (undocumented) function angularWebpackLoader(this: LoaderContext, content: string, map: string): void; export default angularWebpackLoader; -// @public (undocumented) +// @public @deprecated (undocumented) export const AngularWebpackLoaderPath: string; -// @public (undocumented) +// @public @deprecated (undocumented) export class AngularWebpackPlugin { constructor(options?: Partial); // (undocumented) @@ -24,7 +24,7 @@ export class AngularWebpackPlugin { get options(): AngularWebpackPluginOptions; } -// @public (undocumented) +// @public @deprecated (undocumented) export interface AngularWebpackPluginOptions { // (undocumented) compilerOptions?: CompilerOptions; @@ -48,7 +48,7 @@ export interface AngularWebpackPluginOptions { tsconfig: string; } -// @public (undocumented) +// @public @deprecated (undocumented) export const imageDomains: Set; // (No @packageDocumentation comment for this package) diff --git a/packages/angular/ssr/node/src/common-engine/common-engine.ts b/packages/angular/ssr/node/src/common-engine/common-engine.ts index c7567741958f..708d263cde84 100644 --- a/packages/angular/ssr/node/src/common-engine/common-engine.ts +++ b/packages/angular/ssr/node/src/common-engine/common-engine.ts @@ -24,6 +24,10 @@ import { const SSG_MARKER_REGEXP = /ng-server-context=["']\w*\|?ssg\|?\w*["']/; +/** + * @deprecated Use `AngularNodeAppEngine` or `AngularAppEngine` instead. + * Deprecated since v22. + */ export interface CommonEngineOptions { /** A method that when invoked returns a promise that returns an `ApplicationRef` instance once resolved or an NgModule. */ bootstrap?: Type<{}> | ((context: BootstrapContext) => Promise); @@ -38,6 +42,10 @@ export interface CommonEngineOptions { allowedHosts?: readonly string[]; } +/** + * @deprecated Use `AngularNodeAppEngine` or `AngularAppEngine` instead. + * Deprecated since v22. + */ export interface CommonEngineRenderOptions { /** A method that when invoked returns a promise that returns an `ApplicationRef` instance once resolved or an NgModule. */ bootstrap?: Type<{}> | ((context: BootstrapContext) => Promise); @@ -63,8 +71,10 @@ export interface CommonEngineRenderOptions { /** * A common engine to use to server render an application. + * + * @deprecated Use `AngularNodeAppEngine` or `AngularAppEngine` instead. + * Deprecated since v22. */ - export class CommonEngine { private readonly templateCache = new Map(); private readonly inlineCriticalCssProcessor = new CommonEngineInlineCriticalCssProcessor(); diff --git a/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts b/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts index 759433ac7d76..685c90a48a7e 100644 --- a/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts @@ -162,6 +162,11 @@ async function _appShellBuilder( options: BuildWebpackAppShellSchema, context: BuilderContext, ): Promise { + context.logger.warn( + 'The "@angular-devkit/build-angular:app-shell" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:application" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + const browserTarget = targetFromTargetString(options.browserTarget); const serverTarget = targetFromTargetString(options.serverTarget); 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 dd91944b55b8..e5cf3672196d 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 @@ -30,6 +30,11 @@ export async function* buildEsbuildBrowser( }, plugins?: Plugin[], ): AsyncIterable { + context.logger.warn( + 'The "@angular-devkit/build-angular:browser-esbuild" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:application" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + // Warn about any unsupported options if (userOptions['vendorChunk']) { context.logger.warn( diff --git a/packages/angular_devkit/build_angular/src/builders/browser/index.ts b/packages/angular_devkit/build_angular/src/builders/browser/index.ts index 9c1576251d74..f78d9ecd2e8e 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/index.ts @@ -128,6 +128,11 @@ export function buildWebpackBrowser( throw new Error('The builder requires a target.'); } + context.logger.warn( + 'The "@angular-devkit/build-angular:browser" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:application" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + const baseOutputPath = path.resolve(context.workspaceRoot, options.outputPath); let outputPaths: undefined | Map; 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 b3b5e797848f..1e03eef28ef0 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 @@ -57,6 +57,11 @@ export function execute( return EMPTY; } + context.logger.warn( + 'The "@angular-devkit/build-angular:dev-server" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:dev-server" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + return defer(() => initialize(options, projectName, context, extensions?.builderSelector)).pipe( switchMap(({ builderName, normalizedOptions }) => { // Use vite-based development server for esbuild-based builds diff --git a/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts b/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts index 0b08e10b40be..2dc678fe6bc3 100644 --- a/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/extract-i18n/builder.ts @@ -35,6 +35,11 @@ export async function execute( return { success: false }; } + context.logger.warn( + 'The "@angular-devkit/build-angular:extract-i18n" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:extract-i18n" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + const { projectType } = (await context.getProjectMetadata(projectName)) as { projectType?: string; }; diff --git a/packages/angular_devkit/build_angular/src/builders/karma/index.ts b/packages/angular_devkit/build_angular/src/builders/karma/index.ts index 1ea20e0f5db4..6acc9e71b2ae 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/index.ts @@ -39,6 +39,11 @@ export async function* execute( karmaOptions?: (options: KarmaConfigOptions) => KarmaConfigOptions; } = {}, ): AsyncIterable { + context.logger.warn( + 'The "@angular-devkit/build-angular:karma" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:karma" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + // Check Angular version. assertCompatibleAngularVersion(context.workspaceRoot); diff --git a/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts b/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts index 42533a33aa0d..7523e2be45af 100644 --- a/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts @@ -22,6 +22,11 @@ export function execute( options: NgPackagrBuilderOptions, context: BuilderContext, ): Observable { + context.logger.warn( + 'The "@angular-devkit/build-angular:ng-packagr" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:ng-packagr" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + return from( (async () => { // Purge old build disk cache. diff --git a/packages/angular_devkit/build_angular/src/builders/prerender/index.ts b/packages/angular_devkit/build_angular/src/builders/prerender/index.ts index 5fa433f26e8c..4d01c5a3cd3b 100644 --- a/packages/angular_devkit/build_angular/src/builders/prerender/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/prerender/index.ts @@ -278,6 +278,11 @@ export async function execute( options: PrerenderBuilderOptions, context: BuilderContext, ): Promise { + context.logger.warn( + 'The "@angular-devkit/build-angular:prerender" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:application" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + const browserTarget = targetFromTargetString(options.browserTarget); const browserOptions = (await context.getTargetOptions( browserTarget, diff --git a/packages/angular_devkit/build_angular/src/builders/server/index.ts b/packages/angular_devkit/build_angular/src/builders/server/index.ts index ffe7174f0c44..a489c456ec1d 100644 --- a/packages/angular_devkit/build_angular/src/builders/server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/server/index.ts @@ -66,6 +66,11 @@ export function execute( ): Observable { const root = context.workspaceRoot; + context.logger.warn( + 'The "@angular-devkit/build-angular:server" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:application" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + // Check Angular version. assertCompatibleAngularVersion(root); diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts index e919f188e0bf..445252ff158d 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts @@ -63,6 +63,11 @@ export function execute( options: SSRDevServerBuilderOptions, context: BuilderContext, ): Observable { + context.logger.warn( + 'The "@angular-devkit/build-angular:ssr-dev-server" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build:ssr-dev-server" instead. For more information, see https://angular.dev/tools/cli/build-system-migration.', + ); + let browserSync: typeof import('browser-sync'); try { browserSync = createRequire(context.workspaceRoot + '/')('browser-sync'); diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts index 66a2f09a6422..c4f18d7167f0 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts @@ -24,6 +24,10 @@ export type DevServerBuildOutput = BuildResult & { address: string; }; +/** + * @deprecated Part of Angular's Webpack support deprecation. Use `@angular/build` APIs instead. + * Deprecated since v22. + */ export function runWebpackDevServer( config: webpack.Configuration, context: BuilderContext, @@ -136,6 +140,11 @@ const builder: Builder = createBuilder< WebpackDevServerBuilderSchema, DevServerBuildOutput >((options, context) => { + context.logger.warn( + 'The "@angular-devkit/build-webpack:webpack-dev-server" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build" instead.', + ); + const configPath = pathResolve(context.workspaceRoot, options.webpackConfig); return from(getWebpackConfig(configPath)).pipe( diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts b/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts index ce3f91fd69d4..2a97a075e78f 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts @@ -29,6 +29,10 @@ export type BuildResult = BuilderOutput & { outputPath: string; }; +/** + * @deprecated Part of Angular's Webpack support deprecation. Use `@angular/build` APIs instead. + * Deprecated since v22. + */ export function runWebpack( config: webpack.Configuration, context: BuilderContext, @@ -125,6 +129,11 @@ export function runWebpack( const builder: Builder = createBuilder( (options, context) => { + context.logger.warn( + 'The "@angular-devkit/build-webpack:webpack" builder is deprecated as part of Angular\'s Webpack support deprecation. ' + + 'Use "@angular/build" instead.', + ); + const configPath = pathResolve(context.workspaceRoot, options.webpackConfig); return from(getWebpackConfig(configPath)).pipe( diff --git a/packages/ngtools/webpack/src/ivy/index.ts b/packages/ngtools/webpack/src/ivy/index.ts index 845d06385ff2..38442ca6c25a 100644 --- a/packages/ngtools/webpack/src/ivy/index.ts +++ b/packages/ngtools/webpack/src/ivy/index.ts @@ -9,4 +9,8 @@ export { angularWebpackLoader as default } from './loader'; export { type AngularWebpackPluginOptions, AngularWebpackPlugin, imageDomains } from './plugin'; +/** + * @deprecated Part of Angular's Webpack support deprecation. + * Deprecated since v22. + */ export const AngularWebpackLoaderPath: string = __filename; diff --git a/packages/ngtools/webpack/src/ivy/loader.ts b/packages/ngtools/webpack/src/ivy/loader.ts index 79a511fcee06..99cef81333e8 100644 --- a/packages/ngtools/webpack/src/ivy/loader.ts +++ b/packages/ngtools/webpack/src/ivy/loader.ts @@ -16,6 +16,10 @@ type SourceMap = NonNullable< const JS_FILE_REGEXP = /\.[cm]?js$/; +/** + * @deprecated Part of Angular's Webpack support deprecation. + * Deprecated since v22. + */ export function angularWebpackLoader( this: LoaderContext, content: string, diff --git a/packages/ngtools/webpack/src/ivy/plugin.ts b/packages/ngtools/webpack/src/ivy/plugin.ts index f46b1360f26a..eb6038bcb25c 100644 --- a/packages/ngtools/webpack/src/ivy/plugin.ts +++ b/packages/ngtools/webpack/src/ivy/plugin.ts @@ -39,8 +39,16 @@ import { createAotTransformers, createJitTransformers, mergeTransformers } from */ const DIAGNOSTICS_AFFECTED_THRESHOLD = 1; +/** + * @deprecated Part of Angular's Webpack support deprecation. + * Deprecated since v22. + */ export const imageDomains: Set = new Set(); +/** + * @deprecated Part of Angular's Webpack support deprecation. + * Deprecated since v22. + */ export interface AngularWebpackPluginOptions { tsconfig: string; compilerOptions?: CompilerOptions; @@ -71,6 +79,10 @@ interface FileEmitHistoryItem { hash: Uint8Array; } +/** + * @deprecated Part of Angular's Webpack support deprecation. + * Deprecated since v22. + */ export class AngularWebpackPlugin { private readonly pluginOptions: AngularWebpackPluginOptions; private compilerCliModule?: typeof import('@angular/compiler-cli');