feat: make the Ivy compiler the default for ngc (#32219)
This commit switches the default value of the enableIvy flag to true. Applications that run ngc will now by default receive an Ivy build! This does not affect the way Bazel builds in the Angular repo work, since those are still switched based on the value of the --define=compile flag. Additionally, projects using @angular/bazel still use View Engine builds by default. Since most of the Angular repo tests are still written against View Engine (particularly because we still publish VE packages to NPM), this switch also requires lots of `enableIvy: false` flags in tsconfigs throughout the repo. Congrats to the team for reaching this milestone! PR Close #32219
This commit is contained in:
parent
2b64031ddc
commit
ec4381dd40
|
@ -6,7 +6,10 @@
|
|||
"sourceMap": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"lib": [ "es2015", "dom" ],
|
||||
"lib": [
|
||||
"es2015",
|
||||
"dom"
|
||||
],
|
||||
"noImplicitAny": true,
|
||||
"skipLibCheck": true,
|
||||
"suppressImplicitAnyIndexErrors": true
|
||||
|
@ -16,5 +19,8 @@
|
|||
"node_modules/*",
|
||||
"**/*-aot.ts",
|
||||
"aot/**/*"
|
||||
]
|
||||
],
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@
|
|||
],
|
||||
|
||||
"angularCompilerOptions": {
|
||||
"skipMetadataEmit" : true
|
||||
"skipMetadataEmit" : true,
|
||||
"enableIvy": false,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,10 @@
|
|||
"sourceMap": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"lib": [ "es2015", "dom" ],
|
||||
"lib": [
|
||||
"es2015",
|
||||
"dom"
|
||||
],
|
||||
"noImplicitAny": true,
|
||||
"skipLibCheck": true,
|
||||
"suppressImplicitAnyIndexErrors": true
|
||||
|
@ -15,5 +18,8 @@
|
|||
"exclude": [
|
||||
"node_modules/*",
|
||||
"**/*-aot.ts"
|
||||
]
|
||||
],
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false
|
||||
}
|
||||
}
|
|
@ -6,7 +6,10 @@
|
|||
"sourceMap": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"lib": [ "es2015", "dom" ],
|
||||
"lib": [
|
||||
"es2015",
|
||||
"dom"
|
||||
],
|
||||
"noImplicitAny": true,
|
||||
"skipLibCheck": true,
|
||||
"suppressImplicitAnyIndexErrors": true
|
||||
|
@ -15,5 +18,8 @@
|
|||
"exclude": [
|
||||
"node_modules/*",
|
||||
"**/*-aot.ts"
|
||||
]
|
||||
],
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false
|
||||
}
|
||||
}
|
|
@ -13,5 +13,8 @@
|
|||
"node_modules/@types"
|
||||
]
|
||||
},
|
||||
"compileOnSave": true
|
||||
"compileOnSave": true,
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false
|
||||
}
|
||||
}
|
|
@ -18,5 +18,8 @@
|
|||
"es2018",
|
||||
"dom"
|
||||
]
|
||||
}
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -32,5 +32,8 @@
|
|||
"out-tsc",
|
||||
"scripts",
|
||||
"tools"
|
||||
]
|
||||
],
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
/**
|
||||
* @license
|
||||
* Copyright Google Inc. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by an MIT-style license that can be
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const configPath = 'demo/tsconfig.json';
|
||||
const config = {
|
||||
...JSON.parse(fs.readFileSync(configPath, 'utf8')),
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false,
|
||||
},
|
||||
};
|
||||
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
@ -18,6 +18,7 @@ function installLocalPackages() {
|
|||
yarn add "${local_packages[@]}"
|
||||
}
|
||||
|
||||
|
||||
function testBazel() {
|
||||
# Set up
|
||||
bazel version
|
||||
|
@ -25,6 +26,7 @@ function testBazel() {
|
|||
rm -rf demo
|
||||
# Create project
|
||||
ng new demo --collection=@angular/bazel --routing --skip-git --skip-install --style=scss
|
||||
node ./disable-ivy.js
|
||||
cd demo
|
||||
installLocalPackages
|
||||
ng generate component widget --style=css
|
||||
|
|
|
@ -13,7 +13,8 @@
|
|||
"moduleResolution": "node"
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableSummariesForJit": true
|
||||
"enableSummariesForJit": true,
|
||||
"enableIvy": false
|
||||
},
|
||||
"include": [
|
||||
"node_modules/@angular/**/*"
|
||||
|
|
|
@ -16,5 +16,8 @@
|
|||
"es2017",
|
||||
"dom"
|
||||
]
|
||||
}
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
"types": [
|
||||
]
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false,
|
||||
},
|
||||
"files": [
|
||||
"src/main.ts",
|
||||
"src/lazy.module.ts"
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
"angularCompilerOptions": {
|
||||
"annotationsAs": "static fields",
|
||||
"annotateForClosureCompiler": true,
|
||||
"alwaysCompileGeneratedCode": true
|
||||
"alwaysCompileGeneratedCode": true,
|
||||
"enableIvy": false,
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -9,5 +9,8 @@
|
|||
"lib": [ "es2015", "dom" ],
|
||||
"noImplicitAny": true,
|
||||
"suppressImplicitAnyIndexErrors": true
|
||||
}
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false,
|
||||
},
|
||||
}
|
|
@ -2,7 +2,8 @@
|
|||
"angularCompilerOptions": {
|
||||
"annotationsAs": "static fields",
|
||||
"annotateForClosureCompiler": true,
|
||||
"alwaysCompileGeneratedCode": true
|
||||
"alwaysCompileGeneratedCode": true,
|
||||
"enableIvy": false,
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
"types": ["node"],
|
||||
"rootDir": "."
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false,
|
||||
},
|
||||
"files": [
|
||||
"src/app.ts",
|
||||
"src/main.ts"
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
"angularCompilerOptions": {
|
||||
"skipTemplateCodegen": true,
|
||||
"flatModuleOutFile": "index.js",
|
||||
"flatModuleId": "lib1_built"
|
||||
"flatModuleId": "lib1_built",
|
||||
"enableIvy": false,
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@
|
|||
"angularCompilerOptions": {
|
||||
"skipTemplateCodegen": true,
|
||||
"flatModuleId": "lib2_built",
|
||||
"flatModuleOutFile": "index.js"
|
||||
"flatModuleOutFile": "index.js",
|
||||
"enableIvy": false,
|
||||
}
|
||||
}
|
|
@ -2,7 +2,8 @@
|
|||
"angularCompilerOptions": {
|
||||
"annotationsAs": "static fields",
|
||||
"annotateForClosureCompiler": true,
|
||||
"alwaysCompileGeneratedCode": true
|
||||
"alwaysCompileGeneratedCode": true,
|
||||
"enableIvy": false,
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
{
|
||||
"angularCompilerOptions": {
|
||||
"annotationsAs": "static fields",
|
||||
"annotateForClosureCompiler": true
|
||||
"annotateForClosureCompiler": true,
|
||||
"enableIvy": false,
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
"module": "amd",
|
||||
"moduleResolution": "node"
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false
|
||||
},
|
||||
"include": [
|
||||
"node_modules/@angular/**/*"
|
||||
],
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
"angularCompilerOptions": {
|
||||
"flatModuleId": "flat_module",
|
||||
"flatModuleOutFile": "index.js",
|
||||
"skipTemplateCodegen": true
|
||||
"skipTemplateCodegen": true,
|
||||
"enableIvy": false
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"angularCompilerOptions": {
|
||||
"debug": true
|
||||
"debug": true,
|
||||
"enableIvy": false
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"angularCompilerOptions": {
|
||||
"skipTemplateCodegen": true
|
||||
"skipTemplateCodegen": true,
|
||||
"enableIvy": false
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
"annotationsAs": "static fields",
|
||||
"debug": true,
|
||||
"enableSummariesForJit": true,
|
||||
"i18nFormat": "xlf"
|
||||
"i18nFormat": "xlf",
|
||||
"enableIvy": false
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
{
|
||||
"angularCompilerOptions": {
|
||||
"debug": true,
|
||||
"enableSummariesForJit": true
|
||||
"enableSummariesForJit": true,
|
||||
"enableIvy": false
|
||||
},
|
||||
|
||||
"compilerOptions": {
|
||||
|
|
|
@ -68,7 +68,8 @@ export function mainDiagnosticsForTest(
|
|||
}
|
||||
|
||||
function createEmitCallback(options: api.CompilerOptions): api.TsEmitCallback|undefined {
|
||||
const transformDecorators = !options.enableIvy && options.annotationsAs !== 'decorators';
|
||||
const transformDecorators =
|
||||
(options.enableIvy === false && options.annotationsAs !== 'decorators');
|
||||
const transformTypesToClosure = options.annotateForClosureCompiler;
|
||||
if (!transformDecorators && !transformTypesToClosure) {
|
||||
return undefined;
|
||||
|
@ -205,7 +206,7 @@ function reportErrorsAndExit(
|
|||
const errorsAndWarnings = filterErrorsAndWarnings(allDiagnostics);
|
||||
if (errorsAndWarnings.length) {
|
||||
const formatHost = getFormatDiagnosticsHost(options);
|
||||
if (options && options.enableIvy === true) {
|
||||
if (options && options.enableIvy !== false) {
|
||||
const ngDiagnostics = errorsAndWarnings.filter(api.isNgDiagnostic);
|
||||
const tsDiagnostics = errorsAndWarnings.filter(api.isTsDiagnostic);
|
||||
consoleError(replaceTsWithNgInErrors(
|
||||
|
|
|
@ -186,10 +186,7 @@ export interface CompilerOptions extends ts.CompilerOptions {
|
|||
|
||||
/**
|
||||
* Tells the compiler to generate definitions using the Render3 style code generation.
|
||||
* This option defaults to `false`.
|
||||
*
|
||||
* Not all features are supported with this option enabled. It is only supported
|
||||
* for experimentation and testing of Render3 style code generation.
|
||||
* This option defaults to `true`.
|
||||
*
|
||||
* Acceptable values are as follows:
|
||||
*
|
||||
|
|
|
@ -142,7 +142,7 @@ class AngularCompilerProgram implements Program {
|
|||
}
|
||||
|
||||
this.loweringMetadataTransform =
|
||||
new LowerMetadataTransform(options.enableIvy ? R3_LOWER_FIELDS : LOWER_FIELDS);
|
||||
new LowerMetadataTransform(options.enableIvy !== false ? R3_LOWER_FIELDS : LOWER_FIELDS);
|
||||
this.metadataCache = this.createMetadataCache([this.loweringMetadataTransform]);
|
||||
}
|
||||
|
||||
|
@ -262,7 +262,7 @@ class AngularCompilerProgram implements Program {
|
|||
emitCallback?: TsEmitCallback,
|
||||
mergeEmitResultsCallback?: TsMergeEmitResultsCallback,
|
||||
} = {}): ts.EmitResult {
|
||||
if (this.options.enableIvy) {
|
||||
if (this.options.enableIvy !== false) {
|
||||
throw new Error('Cannot run legacy compiler in ngtsc mode');
|
||||
}
|
||||
return this._emitRender2(parameters);
|
||||
|
@ -897,7 +897,7 @@ export function createProgram({rootNames, options, host, oldProgram}: {
|
|||
options: CompilerOptions,
|
||||
host: CompilerHost, oldProgram?: Program
|
||||
}): Program {
|
||||
if (options.enableIvy === true) {
|
||||
if (options.enableIvy !== false) {
|
||||
return new NgtscProgram(rootNames, options, host, oldProgram as NgtscProgram);
|
||||
} else {
|
||||
return new AngularCompilerProgram(rootNames, options, host, oldProgram);
|
||||
|
|
|
@ -225,6 +225,9 @@ describe('extract_i18n command line', () => {
|
|||
"moduleResolution": "node",
|
||||
"lib": ["es6", "dom"],
|
||||
"typeRoots": ["node_modules/@types"]
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false
|
||||
}
|
||||
}`);
|
||||
});
|
||||
|
|
|
@ -59,6 +59,9 @@ describe('ngc transformer command-line', () => {
|
|||
"moduleResolution": "node",
|
||||
"lib": ["es6", "dom"],
|
||||
"typeRoots": ["node_modules/@types"]
|
||||
},
|
||||
"angularCompilerOptions": {
|
||||
"enableIvy": false
|
||||
}
|
||||
}`);
|
||||
});
|
||||
|
|
|
@ -57,6 +57,7 @@ function createTestSupportFor(basePath: string) {
|
|||
'newLine': ts.NewLineKind.LineFeed,
|
||||
'module': ts.ModuleKind.ES2015,
|
||||
'moduleResolution': ts.ModuleResolutionKind.NodeJs,
|
||||
'enableIvy': false,
|
||||
'lib': Object.freeze([
|
||||
path.resolve(basePath, 'node_modules/typescript/lib/lib.es6.d.ts'),
|
||||
]) as string[],
|
||||
|
|
|
@ -26,7 +26,10 @@ describe('Google3 explicitQueryTiming TSLint rule', () => {
|
|||
tmpDir = join(process.env['TEST_TMPDIR'] !, 'google3-test');
|
||||
shx.mkdir('-p', tmpDir);
|
||||
|
||||
writeFile('tsconfig.json', JSON.stringify({compilerOptions: {module: 'es2015'}}));
|
||||
writeFile(
|
||||
'tsconfig.json',
|
||||
JSON.stringify(
|
||||
{compilerOptions: {module: 'es2015'}, angularCompilerOptions: {enableIvy: false}}));
|
||||
});
|
||||
|
||||
afterEach(() => shx.rm('-r', tmpDir));
|
||||
|
|
|
@ -21,7 +21,10 @@ describe('Google3 missing injectable tslint rule', () => {
|
|||
tmpDir = join(process.env['TEST_TMPDIR'] !, 'google3-test');
|
||||
shx.mkdir('-p', tmpDir);
|
||||
|
||||
writeFile('tsconfig.json', JSON.stringify({compilerOptions: {module: 'es2015'}}));
|
||||
writeFile(
|
||||
'tsconfig.json',
|
||||
JSON.stringify(
|
||||
{compilerOptions: {module: 'es2015'}, angularCompilerOptions: {enableIvy: false}}));
|
||||
});
|
||||
|
||||
afterEach(() => shx.rm('-r', tmpDir));
|
||||
|
|
|
@ -21,7 +21,10 @@ describe('Google3 noTemplateVariableAssignment TSLint rule', () => {
|
|||
tmpDir = join(process.env['TEST_TMPDIR'] !, 'google3-test');
|
||||
shx.mkdir('-p', tmpDir);
|
||||
|
||||
writeFile('tsconfig.json', JSON.stringify({compilerOptions: {module: 'es2015'}}));
|
||||
writeFile(
|
||||
'tsconfig.json',
|
||||
JSON.stringify(
|
||||
{compilerOptions: {module: 'es2015'}, angularCompilerOptions: {enableIvy: false}}));
|
||||
});
|
||||
|
||||
afterEach(() => shx.rm('-r', tmpDir));
|
||||
|
|
|
@ -34,7 +34,8 @@ describe('Google3 Renderer to Renderer2 TSLint rule', () => {
|
|||
paths: {
|
||||
'@angular/core': ['angular.d.ts'],
|
||||
}
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
});
|
||||
|
||||
|
|
|
@ -29,7 +29,8 @@ describe('Missing injectable migration', () => {
|
|||
compilerOptions: {
|
||||
experimentalDecorators: true,
|
||||
lib: ['es2015'],
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
writeFile('/angular.json', JSON.stringify({
|
||||
projects: {t: {architect: {build: {options: {tsConfig: './tsconfig.json'}}}}}
|
||||
|
|
|
@ -27,7 +27,8 @@ describe('move-document migration', () => {
|
|||
writeFile('/tsconfig.json', JSON.stringify({
|
||||
compilerOptions: {
|
||||
lib: ['es2015'],
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
writeFile('/angular.json', JSON.stringify({
|
||||
projects: {t: {architect: {build: {options: {tsConfig: './tsconfig.json'}}}}}
|
||||
|
|
|
@ -28,7 +28,8 @@ describe('Renderer to Renderer2 migration', () => {
|
|||
compilerOptions: {
|
||||
lib: ['es2015'],
|
||||
strictNullChecks: true,
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
writeFile('/angular.json', JSON.stringify({
|
||||
projects: {t: {architect: {build: {options: {tsConfig: './tsconfig.json'}}}}}
|
||||
|
|
|
@ -30,7 +30,8 @@ describe('static-queries migration with template strategy', () => {
|
|||
compilerOptions: {
|
||||
experimentalDecorators: true,
|
||||
lib: ['es2015'],
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
writeFile('/angular.json', JSON.stringify({
|
||||
projects: {t: {architect: {build: {options: {tsConfig: './tsconfig.json'}}}}}
|
||||
|
@ -681,6 +682,7 @@ describe('static-queries migration with template strategy', () => {
|
|||
angularCompilerOptions: {
|
||||
flatModuleId: 'flat-module',
|
||||
flatModuleOutFile: 'flat-module-bundle.js',
|
||||
enableIvy: false,
|
||||
},
|
||||
files: ['index.ts']
|
||||
}));
|
||||
|
|
|
@ -34,7 +34,8 @@ describe('static-queries migration with usage strategy', () => {
|
|||
writeFile('/tsconfig.json', JSON.stringify({
|
||||
compilerOptions: {
|
||||
lib: ['es2015'],
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
writeFile('/angular.json', JSON.stringify({
|
||||
projects: {t: {architect: {build: {options: {tsConfig: './tsconfig.json'}}}}}
|
||||
|
|
|
@ -28,7 +28,8 @@ describe('template variable assignment migration', () => {
|
|||
writeFile('/tsconfig.json', JSON.stringify({
|
||||
compilerOptions: {
|
||||
lib: ['es2015'],
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
writeFile('/angular.json', JSON.stringify({
|
||||
projects: {t: {architect: {build: {options: {tsConfig: './tsconfig.json'}}}}}
|
||||
|
|
|
@ -31,7 +31,8 @@ describe('Undecorated classes with DI migration', () => {
|
|||
writeFile('/tsconfig.json', JSON.stringify({
|
||||
compilerOptions: {
|
||||
lib: ['es2015'],
|
||||
}
|
||||
},
|
||||
angularCompilerOptions: {enableIvy: false}
|
||||
}));
|
||||
writeFile('/angular.json', JSON.stringify({
|
||||
projects: {t: {architect: {build: {options: {tsConfig: './tsconfig.json'}}}}}
|
||||
|
@ -1259,6 +1260,7 @@ describe('Undecorated classes with DI migration', () => {
|
|||
generateCodeForLibraries: false,
|
||||
allowEmptyCodegenFiles: true,
|
||||
enableSummariesForJit: true,
|
||||
enableIvy: false,
|
||||
}
|
||||
}));
|
||||
|
||||
|
|
Loading…
Reference in New Issue