diff --git a/packages/angular_devkit/build_angular/src/babel/webpack-loader.ts b/packages/angular_devkit/build_angular/src/babel/webpack-loader.ts index 8dfe97b1481f..e18d81ed4d2d 100644 --- a/packages/angular_devkit/build_angular/src/babel/webpack-loader.ts +++ b/packages/angular_devkit/build_angular/src/babel/webpack-loader.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ import { custom } from 'babel-loader'; +import { ScriptTarget } from 'typescript'; interface AngularCustomOptions { forceES5: boolean; @@ -62,9 +63,11 @@ export default custom(() => { }); return { - async customOptions({ forceES5, ...loaderOptions }, { source }) { - let shouldProcess = forceES5; + async customOptions({ scriptTarget, ...loaderOptions }, { source }) { + // Must process file if plugins are added + let shouldProcess = Array.isArray(loaderOptions.plugins) && loaderOptions.plugins.length > 0; + // Analyze file for linking let shouldLink = false; const { hasLinkerSupport, requiresLinking } = await checkLinking(this.resourcePath, source); if (requiresLinking && !hasLinkerSupport) { @@ -77,17 +80,27 @@ export default custom(() => { } shouldProcess ||= shouldLink; + // Analyze for ES target processing + let forceES5 = false; + const esTarget = scriptTarget as ScriptTarget; + if (esTarget < ScriptTarget.ES2015) { + forceES5 = true; + } + shouldProcess ||= forceES5; + + // Add provided loader options to default base options const options: Record = { ...baseOptions, ...loaderOptions, }; + // Skip babel processing if no actions are needed if (!shouldProcess) { // Force the current file to be ignored options.ignore = [() => true]; } - return { custom: { forceES5: !!forceES5, shouldLink }, loader: options }; + return { custom: { forceES5, shouldLink }, loader: options }; }, config(configuration, { customOptions }) { return { diff --git a/packages/angular_devkit/build_angular/src/utils/build-options.ts b/packages/angular_devkit/build_angular/src/utils/build-options.ts index 93420252b534..f81818cb35a9 100644 --- a/packages/angular_devkit/build_angular/src/utils/build-options.ts +++ b/packages/angular_devkit/build_angular/src/utils/build-options.ts @@ -16,7 +16,6 @@ import { I18NMissingTranslation, IndexUnion, Localize, - OptimizationClass, SourceMapClass, } from '../browser/schema'; import { Schema as DevServerSchema } from '../dev-server/schema'; @@ -98,5 +97,5 @@ export interface WebpackConfigOptions { buildOptions: T; tsConfig: ParsedConfiguration; tsConfigPath: string; - supportES2015: boolean; + scriptTarget: import('typescript').ScriptTarget; } diff --git a/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts b/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts index 0a5909224e54..9f3cd498f2c0 100644 --- a/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts +++ b/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts @@ -77,7 +77,7 @@ export async function generateWebpackConfig( buildOptions, tsConfig, tsConfigPath, - supportES2015, + scriptTarget, }; wco.buildOptions.progress = defaultProgress(wco.buildOptions.progress); diff --git a/packages/angular_devkit/build_angular/src/webpack/configs/common.ts b/packages/angular_devkit/build_angular/src/webpack/configs/common.ts index b56e6a80bcda..14ca42be5830 100644 --- a/packages/angular_devkit/build_angular/src/webpack/configs/common.ts +++ b/packages/angular_devkit/build_angular/src/webpack/configs/common.ts @@ -554,7 +554,7 @@ export function getCommonConfig(wco: WebpackConfigOptions): Configuration { cacheIdentifier: JSON.stringify({ buildAngular: require('../../../package.json').version, }), - forceES5: !wco.supportES2015, + scriptTarget: wco.scriptTarget, }, }, ...buildOptimizerUseRule,