Skip to content

Commit 88bea1a

Browse files
clydinalan-agius4
authored andcommitted
fix(@angular-devkit/build-angular): avoid double build optimizer processing
TypeScript files had the potential to be processed twice by the build optimizer. This did not affect the output code but could lead to longer production build times. The build optimizer is now configured in one centralized location for both TypeScript and JavaScript files. The Webpack configuration partial for TypeScript support is also reduced to one common function for both AOT and JIT as a result. (cherry picked from commit e559236)
1 parent 7105074 commit 88bea1a

File tree

7 files changed

+21
-50
lines changed

7 files changed

+21
-50
lines changed

packages/angular_devkit/build_angular/src/browser/index.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,11 @@ import {
5252
getIndexOutputFile,
5353
} from '../utils/webpack-browser-config';
5454
import {
55-
getAotConfig,
5655
getBrowserConfig,
5756
getCommonConfig,
58-
getNonAotConfig,
5957
getStatsConfig,
6058
getStylesConfig,
59+
getTypeScriptConfig,
6160
getWorkerConfig,
6261
} from '../webpack/configs';
6362
import { NgBuildAnalyticsPlugin } from '../webpack/plugins/analytics';
@@ -121,7 +120,7 @@ export function getAnalyticsConfig(
121120

122121
export function getCompilerConfig(wco: WebpackConfigOptions): webpack.Configuration {
123122
if (wco.buildOptions.main || wco.buildOptions.polyfills) {
124-
return wco.buildOptions.aot ? getAotConfig(wco) : getNonAotConfig(wco);
123+
return getTypeScriptConfig(wco);
125124
}
126125

127126
return {};

packages/angular_devkit/build_angular/src/extract-i18n/index.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ import { ExecutionTransformer } from '../transforms';
2222
import { createI18nOptions } from '../utils/i18n-options';
2323
import { assertCompatibleAngularVersion } from '../utils/version';
2424
import { generateBrowserWebpackConfigFromContext } from '../utils/webpack-browser-config';
25-
import { getAotConfig, getBrowserConfig, getCommonConfig, getStatsConfig } from '../webpack/configs';
25+
import {
26+
getBrowserConfig,
27+
getCommonConfig,
28+
getStatsConfig,
29+
getTypeScriptConfig,
30+
} from '../webpack/configs';
2631
import { createWebpackLoggingCallback } from '../webpack/utils/stats';
2732
import { Format, Schema } from './schema';
2833

@@ -194,7 +199,7 @@ export async function execute(
194199
{ plugins: [new NoEmitPlugin()] },
195200
getCommonConfig(wco),
196201
getBrowserConfig(wco),
197-
getAotConfig(wco),
202+
getTypeScriptConfig(wco),
198203
getStatsConfig(wco),
199204
];
200205

packages/angular_devkit/build_angular/src/karma/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import { assertCompatibleAngularVersion } from '../utils/version';
1818
import { generateBrowserWebpackConfigFromContext } from '../utils/webpack-browser-config';
1919
import {
2020
getCommonConfig,
21-
getNonAotConfig,
2221
getStylesConfig,
2322
getTestConfig,
23+
getTypeScriptConfig,
2424
getWorkerConfig,
2525
} from '../webpack/configs';
2626
import { SingleTestTransformLoader } from '../webpack/plugins/single-test-transform';
@@ -46,7 +46,7 @@ async function initialize(
4646
wco => [
4747
getCommonConfig(wco),
4848
getStylesConfig(wco),
49-
getNonAotConfig(wco),
49+
getTypeScriptConfig(wco),
5050
getTestConfig(wco),
5151
getWorkerConfig(wco),
5252
],

packages/angular_devkit/build_angular/src/server/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@ import { readTsconfig } from '../utils/read-tsconfig';
2222
import { assertCompatibleAngularVersion } from '../utils/version';
2323
import { generateI18nBrowserWebpackConfigFromContext } from '../utils/webpack-browser-config';
2424
import {
25-
getAotConfig,
2625
getCommonConfig,
2726
getServerConfig,
2827
getStatsConfig,
2928
getStylesConfig,
29+
getTypeScriptConfig,
3030
} from '../webpack/configs';
3131
import { JsonCompilationStats, webpackStatsLogger } from '../webpack/utils/stats';
3232
import { Schema as ServerBuilderOptions } from './schema';
@@ -166,7 +166,7 @@ async function initialize(
166166
getServerConfig(wco),
167167
getStylesConfig(wco),
168168
getStatsConfig(wco),
169-
getAotConfig(wco),
169+
getTypeScriptConfig(wco),
170170
],
171171
);
172172

packages/angular_devkit/build_angular/src/webpack/configs/typescript.ts

+6-39
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
* Use of this source code is governed by an MIT-style license that can be
66
* found in the LICENSE file at https://angular.io/license
77
*/
8-
import { buildOptimizerLoaderPath } from '@angular-devkit/build-optimizer';
98
import { getSystemPath } from '@angular-devkit/core';
109
import { CompilerOptions } from '@angular/compiler-cli';
1110
import { AngularWebpackLoaderPath, AngularWebpackPlugin } from '@ngtools/webpack';
@@ -78,55 +77,23 @@ function createIvyPlugin(
7877
});
7978
}
8079

81-
export function getNonAotConfig(wco: WebpackConfigOptions) {
82-
const { tsConfigPath } = wco;
83-
84-
return {
85-
module: {
86-
rules: [
87-
{
88-
test: /\.[jt]sx?$/,
89-
loader: AngularWebpackLoaderPath,
90-
},
91-
],
92-
},
93-
plugins: [
94-
createIvyPlugin(wco, false, tsConfigPath),
95-
],
96-
};
97-
}
98-
99-
export function getAotConfig(wco: WebpackConfigOptions) {
100-
const { tsConfigPath, buildOptions } = wco;
80+
export function getTypeScriptConfig(wco: WebpackConfigOptions) {
81+
const { buildOptions, tsConfigPath } = wco;
82+
const aot = !!buildOptions.aot;
10183

10284
ensureIvy(wco);
10385

10486
return {
10587
module: {
10688
rules: [
10789
{
108-
test: /\.tsx?$/,
109-
use: [
110-
...(buildOptions.buildOptimizer
111-
? [
112-
{
113-
loader: buildOptimizerLoaderPath,
114-
options: { sourceMap: buildOptions.sourceMap.scripts },
115-
},
116-
]
117-
: []),
118-
AngularWebpackLoaderPath,
119-
],
120-
},
121-
// "allowJs" support with ivy plugin - ensures build optimizer is not run twice
122-
{
123-
test: /\.jsx?$/,
124-
use: [AngularWebpackLoaderPath],
90+
test: /\.[jt]sx?$/,
91+
loader: AngularWebpackLoaderPath,
12592
},
12693
],
12794
},
12895
plugins: [
129-
createIvyPlugin(wco, true, tsConfigPath),
96+
createIvyPlugin(wco, aot, tsConfigPath),
13097
],
13198
};
13299
}

tests/legacy-cli/e2e/tests/build/differential-loading-sri.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default async function () {
5656
'--output-path=dist/second',
5757
);
5858

59-
const chunkId = '730';
59+
const chunkId = '265';
6060
const codeHashES5 = createHash('sha384')
6161
.update(await readFile(`dist/first/${chunkId}-es5.js`))
6262
.digest('base64');

tests/legacy-cli/e2e/tests/build/worker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export default async function () {
3535
await expectFileToMatch('dist/test-project/main-es2017.js', 'src_app_app_worker_ts');
3636

3737
await ng('build', '--output-hashing=none');
38-
const chunkId = '137';
38+
const chunkId = '954';
3939
await expectFileToExist(`dist/test-project/${chunkId}-es5.js`);
4040
await expectFileToMatch('dist/test-project/main-es5.js', chunkId);
4141
await expectFileToExist(`dist/test-project/${chunkId}-es2017.js`);

0 commit comments

Comments
 (0)