From 28d10d93755e5947ddccfb10497cd11bc5f4ea72 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 30 Mar 2021 11:20:09 +0200 Subject: [PATCH 1/4] refactor(@angular-devkit/build-angular): remove view engine app-shell generation BREAKING CHANGE: App-shell builder now only supports generation using Ivy --- .../build_angular/src/app-shell/index.ts | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/app-shell/index.ts b/packages/angular_devkit/build_angular/src/app-shell/index.ts index 94d155aa95d3..408e3018d22e 100644 --- a/packages/angular_devkit/build_angular/src/app-shell/index.ts +++ b/packages/angular_devkit/build_angular/src/app-shell/index.ts @@ -72,21 +72,12 @@ async function _renderUniversal( const { AppServerModule, - AppServerModuleNgFactory, renderModule, - renderModuleFactory, } = await import(serverBundlePath); - let renderModuleFn: (module: unknown, options: {}) => Promise; - let AppServerModuleDef: unknown; + const renderModuleFn: ((module: unknown, options: {}) => Promise) | undefined = renderModule; - if (renderModuleFactory && AppServerModuleNgFactory) { - renderModuleFn = renderModuleFactory; - AppServerModuleDef = AppServerModuleNgFactory; - } else if (renderModule && AppServerModule) { - renderModuleFn = renderModule; - AppServerModuleDef = AppServerModule; - } else { + if (!(renderModuleFn && AppServerModule)) { throw new Error(`renderModule method and/or AppServerModule were not exported from: ${serverBundlePath}.`); } @@ -96,7 +87,7 @@ async function _renderUniversal( url: options.route, }; - let html = await renderModuleFn(AppServerModuleDef, renderOpts); + let html = await renderModuleFn(AppServerModule, renderOpts); // Overwrite the client index file. const outputIndexPath = options.outputIndexPath ? path.join(root, options.outputIndexPath) From f78926af034d2d788cd3ef75eabc07457a61767c Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 30 Mar 2021 11:20:48 +0200 Subject: [PATCH 2/4] refactor(@angular-devkit/build-angular): remove view engine check from analytics collector --- .../src/webpack/plugins/analytics.ts | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/webpack/plugins/analytics.ts b/packages/angular_devkit/build_angular/src/webpack/plugins/analytics.ts index 094f9e242d6b..b646a37a6b71 100644 --- a/packages/angular_devkit/build_angular/src/webpack/plugins/analytics.ts +++ b/packages/angular_devkit/build_angular/src/webpack/plugins/analytics.ts @@ -157,7 +157,6 @@ export class NgBuildAnalyticsPlugin { this._stats.numberOfNgOnInit += countOccurrences(module._source.source(), 'ngOnInit', true); // Count the number of `Component({` strings (case sensitive), which happens in __decorate(). - // This does not include View Engine AOT compilation, we use the ngfactory for it. this._stats.numberOfComponents += countOccurrences(module._source.source(), 'Component({'); // For Ivy we just count ɵcmp. this._stats.numberOfComponents += countOccurrences(module._source.source(), '.ɵcmp', true); @@ -166,19 +165,6 @@ export class NgBuildAnalyticsPlugin { } } - protected _checkNgFactoryNormalModule(module: NormalModule) { - if (module._source) { - // PLEASE REMEMBER: - // We're dealing with ES5 _or_ ES2015 JavaScript at this point (we don't know for sure). - - // Count the number of `.ɵccf(` strings (case sensitive). They're calls to components - // factories. - this._stats.numberOfComponents += countOccurrences(module._source.source(), '.ɵccf('); - // for ascii_only true - this._stats.numberOfComponents += countOccurrences(module._source.source(), '.\u0275ccf('); - } - } - protected _collectErrors(stats: Stats) { if (stats.hasErrors()) { for (const errObject of stats.compilation.errors) { @@ -267,8 +253,6 @@ export class NgBuildAnalyticsPlugin { // Check that it's a source file from the project. if (module.resource.endsWith('.ts')) { this._checkTsNormalModule(module); - } else if (module.resource.endsWith('.ngfactory.js')) { - this._checkNgFactoryNormalModule(module); } } From 78440e2a6058ed21b1e5d0402282514d82743511 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 30 Mar 2021 11:21:32 +0200 Subject: [PATCH 3/4] refactor(@angular-devkit/build-angular): remove ngfactories checks --- .../build_angular/src/webpack/configs/common.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 a9b0a842d746..482e461d4811 100644 --- a/packages/angular_devkit/build_angular/src/webpack/configs/common.ts +++ b/packages/angular_devkit/build_angular/src/webpack/configs/common.ts @@ -281,7 +281,7 @@ export function getCommonConfig(wco: WebpackConfigOptions): Configuration { const CircularDependencyPlugin = require('circular-dependency-plugin'); extraPlugins.push( new CircularDependencyPlugin({ - exclude: /([\\\/]node_modules[\\\/])|(ngfactory\.js$)/, + exclude: /[\\\/]node_modules[\\\/]/, }), ); } @@ -332,8 +332,8 @@ export function getCommonConfig(wco: WebpackConfigOptions): Configuration { extraRules.push({ test: /\.m?js$/, exclude: vendorSourceMap - ? /(ngfactory|ngstyle)\.js$/ - : [/[\\\/]node_modules[\\\/]/, /(ngfactory|ngstyle)\.js$/], + ? undefined + : /[\\\/]node_modules[\\\/]/, enforce: 'pre', loader: require.resolve('source-map-loader'), }); @@ -496,7 +496,7 @@ export function getCommonConfig(wco: WebpackConfigOptions): Configuration { }, { test: /\.[cm]?js$|\.tsx?$/, - exclude: [/[\/\\](?:core-js|\@babel|tslib|web-animations-js)[\/\\]/, /(ngfactory|ngstyle)\.js$/], + exclude: [/[\/\\](?:core-js|\@babel|tslib|web-animations-js)[\/\\]/], use: [ { loader: require.resolve('../../babel/webpack-loader'), From 26894d4b90261e85c449bf9971dc1ffd4c9410d1 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 30 Mar 2021 11:52:45 +0200 Subject: [PATCH 4/4] refactor(@angular-devkit/build-optimizer): remove ngfactories checks --- .../src/build-optimizer/build-optimizer.ts | 9 +-------- .../src/build-optimizer/build-optimizer_spec.ts | 2 -- .../src/build-optimizer/webpack-loader.ts | 8 +------- 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts index 04bddef732f4..d1e79fc67abf 100644 --- a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts +++ b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer.ts @@ -40,12 +40,6 @@ const knownSideEffectFreeAngularModules = [ /[\\/]node_modules[\\/]rxjs[\\/]/, ]; -// Factories created by AOT are known to have no side effects. -const ngFactories = [ - '.ngfactory.js', - '.ngstyle.js', -]; - // Known locations for the source files of @angular/core. const coreFilesRegex = /[\\/]node_modules[\\/]@angular[\\/]core[\\/][f]?esm2015[\\/]/; @@ -59,8 +53,7 @@ function isKnownSideEffectFree(filePath: string) { return false; } - return ngFactories.some((s) => filePath.endsWith(s)) || - knownSideEffectFreeAngularModules.some((re) => re.test(filePath)); + return knownSideEffectFreeAngularModules.some((re) => re.test(filePath)); } export interface BuildOptimizerOptions { diff --git a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts index a7b094d5589f..e86217806082 100644 --- a/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts +++ b/packages/angular_devkit/build_optimizer/src/build-optimizer/build-optimizer_spec.ts @@ -73,8 +73,6 @@ describe('build-optimizer', () => { '/node_modules/@angular/core/esm2015/core.js', '\\node_modules\\@angular\\core\\fesm2015\\core.js', '\\node_modules\\@angular\\core\\esm2015\\core.js', - '/project/file.ngfactory.js', - '/project/file.ngstyle.js', ]; inputPaths.forEach((inputFilePath) => { diff --git a/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-loader.ts b/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-loader.ts index 8e26ef0997e5..6340ebfbb481 100644 --- a/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-loader.ts +++ b/packages/angular_devkit/build_optimizer/src/build-optimizer/webpack-loader.ts @@ -17,13 +17,7 @@ interface BuildOptimizerLoaderOptions { export const buildOptimizerLoaderPath = __filename; -const alwaysProcess = (path: string) => - // Always process TS files. - path.endsWith('.ts') || - path.endsWith('.tsx') || - // Always process factory files. - path.endsWith('.ngfactory.js') || - path.endsWith('.ngstyle.js'); +const alwaysProcess = (path: string) => path.endsWith('.ts') || path.endsWith('.tsx'); export default function buildOptimizerLoader( // Webpack 5 does not provide a LoaderContext type