diff --git a/docs/documentation/build.md b/docs/documentation/build.md index a78428af1deb..01fedf0e3c88 100644 --- a/docs/documentation/build.md +++ b/docs/documentation/build.md @@ -81,6 +81,7 @@ Flag | `--dev` | `--prod` `--sourcemaps` | `true` | `false` `--extract-css` | `false` | `true` `--named-chunks`   | `true` | `false` +`--build-optimizer` | `false` | `true` with AOT and Angular 5 `--extract-licenses` Extract all licenses in a separate file, in the case of production builds only. `--i18n-file` Localization file to use for i18n. @@ -353,7 +354,7 @@ Note: service worker support is experimental and subject to change. --build-optimizer

- (Experimental) Enables @angular-devkit/build-optimizer optimizations when using `--aot`. + Enables @angular-devkit/build-optimizer optimizations when using `--aot`.

diff --git a/packages/@angular/cli/commands/build.ts b/packages/@angular/cli/commands/build.ts index b4ab4e7aeca1..9630918f2e85 100644 --- a/packages/@angular/cli/commands/build.ts +++ b/packages/@angular/cli/commands/build.ts @@ -166,9 +166,7 @@ export const baseBuildCommandOptions: any = [ { name: 'build-optimizer', type: Boolean, - default: false, - description: '(Experimental) Enables @angular-devkit/build-optimizer ' - + 'optimizations when using `--aot`.' + description: 'Enables @angular-devkit/build-optimizer optimizations when using `--aot`.' }, { name: 'named-chunks', diff --git a/packages/@angular/cli/models/webpack-config.ts b/packages/@angular/cli/models/webpack-config.ts index a1e8e438b1d5..aa88836dba50 100644 --- a/packages/@angular/cli/models/webpack-config.ts +++ b/packages/@angular/cli/models/webpack-config.ts @@ -1,3 +1,4 @@ +import { AngularCompilerPlugin } from '@ngtools/webpack'; import { readTsconfig } from '../utilities/read-tsconfig'; const webpackMerge = require('webpack-merge'); import { CliConfig } from './config'; @@ -94,7 +95,8 @@ export class NgCliWebpackConfig { sourcemaps: true, extractCss: false, namedChunks: true, - aot: false + aot: false, + buildOptimizer: false }, production: { environment: 'prod', @@ -106,7 +108,14 @@ export class NgCliWebpackConfig { } }; - return Object.assign({}, targetDefaults[buildOptions.target], buildOptions); + const merged = Object.assign({}, targetDefaults[buildOptions.target], buildOptions); + + // Use Build Optimizer on prod AOT builds by default when AngularCompilerPlugin is supported. + const buildOptimizer = { + buildOptimizer: merged.aot && AngularCompilerPlugin.isSupported() + }; + + return Object.assign({}, buildOptimizer, merged); } // Fill in defaults from .angular-cli.json diff --git a/tests/e2e/tests/build/aot/angular-compiler.ts b/tests/e2e/tests/build/aot/angular-compiler.ts index e24ff7f5872e..4d1a1aedf146 100644 --- a/tests/e2e/tests/build/aot/angular-compiler.ts +++ b/tests/e2e/tests/build/aot/angular-compiler.ts @@ -1,6 +1,6 @@ import { ng, silentNpm } from '../../../utils/process'; import { updateJsonFile } from '../../../utils/project'; -import { expectFileToMatch, rimraf, moveFile } from '../../../utils/fs'; +import { expectFileToMatch, rimraf, moveFile, expectFileToExist } from '../../../utils/fs'; import { getGlobalVariable } from '../../../utils/env'; import { expectToFail } from '../../../utils/utils'; @@ -13,6 +13,7 @@ export default function () { return Promise.resolve(); } + // These tests should be moved to the default when we use ng5 in new projects. return Promise.resolve() .then(() => moveFile('node_modules', '../node_modules')) .then(() => updateJsonFile('package.json', packageJson => { @@ -36,6 +37,11 @@ export default function () { .then(() => expectFileToMatch('dist/main.bundle.js', /bootstrapModuleFactory.*\/\* AppModuleNgFactory \*\//)) + // Build optimizer should default to true on prod builds. + .then(() => ng('build', '--prod', '--output-hashing=none')) + .then(() => expectToFail(() => expectFileToExist('dist/vendor.js'))) + .then(() => expectToFail(() => expectFileToMatch('dist/main.js', /\.decorators =/))) + // tests for register_locale_data transformer .then(() => rimraf('dist')) .then(() => ng('build', '--locale=fr'))