Skip to content
Permalink
Browse files

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
  • Loading branch information...
alxhub authored and AndrewKushnir committed Aug 20, 2019
1 parent 2b64031 commit ec4381dd401f03bded652665b047b6b90f2b425f
Showing with 146 additions and 48 deletions.
  1. +9 −3 aio/content/examples/upgrade-phonecat-1-typescript/tsconfig.json
  2. +2 −1 aio/content/examples/upgrade-phonecat-2-hybrid/tsconfig-aot.json
  3. +9 −3 aio/content/examples/upgrade-phonecat-2-hybrid/tsconfig.json
  4. +9 −3 aio/content/examples/upgrade-phonecat-3-final/tsconfig.json
  5. +5 −2 aio/content/examples/visual-studio-2015/tsconfig.json
  6. +4 −1 aio/tools/examples/shared/boilerplate/cli/tsconfig.json
  7. +4 −1 aio/tsconfig.json
  8. +17 −0 integration/bazel-schematics/disable-ivy.js
  9. +2 −0 integration/bazel-schematics/test.sh
  10. +2 −1 integration/bazel/angular-metadata.tsconfig.json
  11. +4 −1 integration/cli-hello-world/tsconfig.json
  12. +3 −0 integration/dynamic-compiler/tsconfig.json
  13. +2 −1 integration/hello_world__closure/tsconfig.json
  14. +4 −1 integration/hello_world__systemjs_umd/src/tsconfig.json
  15. +2 −1 integration/i18n/tsconfig.json
  16. +3 −0 integration/injectable-def/tsconfig-app.json
  17. +2 −1 integration/injectable-def/tsconfig-lib1.json
  18. +2 −1 integration/injectable-def/tsconfig-lib2.json
  19. +2 −1 integration/ng_elements/tsconfig.json
  20. +2 −1 integration/platform-server/tsconfig.json
  21. +3 −0 packages/bazel/src/schematics/ng-add/files/angular-metadata.tsconfig.json.template
  22. +2 −1 packages/compiler-cli/integrationtest/flat_module/tsconfig-build.json
  23. +2 −1 packages/compiler-cli/integrationtest/ngtools_src/tsconfig-build.json
  24. +2 −1 packages/compiler-cli/integrationtest/third_party_src/tsconfig-build.json
  25. +2 −1 packages/compiler-cli/integrationtest/tsconfig-build.json
  26. +2 −1 packages/compiler-cli/integrationtest/tsconfig-xi18n.json
  27. +3 −2 packages/compiler-cli/src/main.ts
  28. +1 −4 packages/compiler-cli/src/transformers/api.ts
  29. +3 −3 packages/compiler-cli/src/transformers/program.ts
  30. +3 −0 packages/compiler-cli/test/extract_i18n_spec.ts
  31. +3 −0 packages/compiler-cli/test/ngc_spec.ts
  32. +1 −0 packages/compiler-cli/test/test_support.ts
  33. +4 −1 packages/core/schematics/test/google3/explicit_query_timing_rule_spec.ts
  34. +4 −1 packages/core/schematics/test/google3/missing_injectable_rule_spec.ts
  35. +4 −1 packages/core/schematics/test/google3/no_template_variable_assignment_rule_spec.ts
  36. +2 −1 packages/core/schematics/test/google3/renderer_to_renderer2_spec.ts
  37. +2 −1 packages/core/schematics/test/missing_injectable_migration_spec.ts
  38. +2 −1 packages/core/schematics/test/move_document_migration_spec.ts
  39. +2 −1 packages/core/schematics/test/renderer_to_renderer2_migration_spec.ts
  40. +3 −1 packages/core/schematics/test/static_queries_migration_template_spec.ts
  41. +2 −1 packages/core/schematics/test/static_queries_migration_usage_spec.ts
  42. +2 −1 packages/core/schematics/test/template_var_assignment_migration_spec.ts
  43. +3 −1 packages/core/schematics/test/undecorated_classes_with_di_migration_spec.ts
@@ -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,13 +18,15 @@ function installLocalPackages() {
yarn add "${local_packages[@]}"
}


function testBazel() {
# Set up
bazel version
ng version
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
}
}`);
});

0 comments on commit ec4381d

Please sign in to comment.
You can’t perform that action at this time.