diff --git a/packages/angular_devkit/build_angular/src/browser/index.ts b/packages/angular_devkit/build_angular/src/browser/index.ts index a05e7b5b2a80..9adf95b3125d 100644 --- a/packages/angular_devkit/build_angular/src/browser/index.ts +++ b/packages/angular_devkit/build_angular/src/browser/index.ts @@ -274,8 +274,11 @@ export function buildWebpackBrowser( } // Fix incorrectly set `initial` value on chunks. - const extraEntryPoints = normalizeExtraEntryPoints(options.styles || [], 'styles') - .concat(normalizeExtraEntryPoints(options.scripts || [], 'scripts')); + const extraEntryPoints = [ + ...normalizeExtraEntryPoints(options.styles || [], 'styles'), + ...normalizeExtraEntryPoints(options.scripts || [], 'scripts'), + ]; + const webpackStats = { ...webpackRawStats, chunks: markAsyncChunksNonInitial(webpackRawStats, extraEntryPoints), 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 781e4e64d70b..541ae08f5536 100644 --- a/packages/angular_devkit/build_angular/src/webpack/configs/common.ts +++ b/packages/angular_devkit/build_angular/src/webpack/configs/common.ts @@ -361,10 +361,15 @@ export function getCommonConfig(wco: WebpackConfigOptions): Configuration { ); } - if (!differentialLoadingMode) { + if (buildOptions.budgets.length && !differentialLoadingMode) { // Budgets are computed after differential builds, not via a plugin. // https://github.com/angular/angular-cli/blob/master/packages/angular_devkit/build_angular/src/browser/index.ts - extraPlugins.push(new BundleBudgetPlugin({ budgets: buildOptions.budgets })); + const extraEntryPoints = [ + ...normalizeExtraEntryPoints(buildOptions.styles || [], 'styles'), + ...normalizeExtraEntryPoints(buildOptions.scripts || [], 'scripts'), + ]; + + extraPlugins.push(new BundleBudgetPlugin({ budgets: buildOptions.budgets, extraEntryPoints })); } if ((scriptsSourceMap || stylesSourceMap)) { diff --git a/packages/angular_devkit/build_angular/src/webpack/plugins/bundle-budget.ts b/packages/angular_devkit/build_angular/src/webpack/plugins/bundle-budget.ts index 260e304ddb93..c5dfe10c3e73 100644 --- a/packages/angular_devkit/build_angular/src/webpack/plugins/bundle-budget.ts +++ b/packages/angular_devkit/build_angular/src/webpack/plugins/bundle-budget.ts @@ -10,9 +10,12 @@ import { Budget } from '../../browser/schema'; import { ThresholdSeverity, checkBudgets } from '../../utils/bundle-calculator'; import { ProcessBundleResult } from '../../utils/process-bundle'; import { addError, addWarning } from '../../utils/webpack-diagnostics'; +import { markAsyncChunksNonInitial } from '../utils/async-chunks'; +import { NormalizedEntryPoint } from '../utils/helpers'; export interface BundleBudgetPluginOptions { budgets: Budget[]; + extraEntryPoints: NormalizedEntryPoint[]; } export class BundleBudgetPlugin { @@ -30,7 +33,10 @@ export class BundleBudgetPlugin { // builds are disabled. const processResults: ProcessBundleResult[] = []; + // Fix incorrectly set `initial` value on chunks. const stats = compilation.getStats().toJson(); + stats.chunks = markAsyncChunksNonInitial(stats, this.options.extraEntryPoints); + for (const { severity, message } of checkBudgets(budgets, stats, processResults)) { switch (severity) { case ThresholdSeverity.Warning: diff --git a/packages/angular_devkit/build_angular/src/webpack/utils/async-chunks.ts b/packages/angular_devkit/build_angular/src/webpack/utils/async-chunks.ts index 5c7657e47339..d2a48dbfb130 100644 --- a/packages/angular_devkit/build_angular/src/webpack/utils/async-chunks.ts +++ b/packages/angular_devkit/build_angular/src/webpack/utils/async-chunks.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.io/license */ import * as webpack from 'webpack'; -import { NormalizedEntryPoint } from '../configs'; +import { NormalizedEntryPoint } from './helpers'; /** * Webpack stats may incorrectly mark extra entry points `initial` chunks, when