From cd50691db8256f5138c0ecb6f68feeed32054e6c Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 25 Jul 2018 16:24:41 -0400 Subject: [PATCH] fix(@angular-devkit/build-angular): ensure failure with disabled AOT and enabled build optimizer Fixes #11157 --- .../angular_devkit/build_angular/src/browser/index.ts | 10 +++++----- .../test/browser/build-optimizer_spec_large.ts | 6 ++++++ tests/legacy-cli/e2e/tests/build/build-optimizer.ts | 3 ++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/browser/index.ts b/packages/angular_devkit/build_angular/src/browser/index.ts index a4c12abc36a9..de8c417d69b5 100644 --- a/packages/angular_devkit/build_angular/src/browser/index.ts +++ b/packages/angular_devkit/build_angular/src/browser/index.ts @@ -71,11 +71,6 @@ export class BrowserBuilder implements Builder { // Replace the assets in options with the normalized version. tap((assetPatternObjects => options.assets = assetPatternObjects)), concatMap(() => { - // Ensure Build Optimizer is only used with AOT. - if (options.buildOptimizer && !options.aot) { - throw new Error('The `--build-optimizer` option cannot be used without `--aot`.'); - } - let webpackConfig; try { webpackConfig = this.buildWebpackConfig(root, projectRoot, host, @@ -119,6 +114,11 @@ export class BrowserBuilder implements Builder { host: virtualFs.Host, options: NormalizedBrowserBuilderSchema, ) { + // Ensure Build Optimizer is only used with AOT. + if (options.buildOptimizer && !options.aot) { + throw new Error('The `--build-optimizer` option cannot be used without `--aot`.'); + } + let wco: WebpackConfigOptions; const tsConfigPath = getSystemPath(normalize(resolve(root, normalize(options.tsConfig)))); diff --git a/packages/angular_devkit/build_angular/test/browser/build-optimizer_spec_large.ts b/packages/angular_devkit/build_angular/test/browser/build-optimizer_spec_large.ts index d31d173c6f34..e91af8d67d14 100644 --- a/packages/angular_devkit/build_angular/test/browser/build-optimizer_spec_large.ts +++ b/packages/angular_devkit/build_angular/test/browser/build-optimizer_spec_large.ts @@ -30,6 +30,12 @@ describe('Browser Builder build optimizer', () => { ).toPromise().then(done, done.fail); }); + it('fails if AOT is disabled', (done) => { + const overrides = { aot: false, buildOptimizer: true }; + runTargetSpec(host, browserTargetSpec, overrides) + .toPromise().then(() => done.fail(), () => done()); + }); + it('reduces bundle size', (done) => { const noBoOverrides = { aot: true, optimization: true, vendorChunk: false }; const boOverrides = { ...noBoOverrides, buildOptimizer: true }; diff --git a/tests/legacy-cli/e2e/tests/build/build-optimizer.ts b/tests/legacy-cli/e2e/tests/build/build-optimizer.ts index 8f01e78e6955..365c0e3d1067 100644 --- a/tests/legacy-cli/e2e/tests/build/build-optimizer.ts +++ b/tests/legacy-cli/e2e/tests/build/build-optimizer.ts @@ -10,5 +10,6 @@ export default function () { .then(() => expectToFail(() => expectFileToMatch('dist/test-project/main.js', /\.decorators =/))) .then(() => ng('build', '--prod')) .then(() => expectToFail(() => expectFileToExist('dist/vendor.js'))) - .then(() => expectToFail(() => expectFileToMatch('dist/test-project/main.js', /\.decorators =/))); + .then(() => expectToFail(() => expectFileToMatch('dist/test-project/main.js', /\.decorators =/))) + .then(() => expectToFail(() => ng('build', '--aot=false', '--build-optimizer'))); }