Quick start for enabling Angular v6 Ivy compiler
CAUTION: This is so extremely experimental note.
“Ivy” is a new view renderer for Angular v6. Since v6.0.0-beta.1, Ivy is published as a experimental API.
## Create a project
Let’s make a new project with ng new --minimal
$ ng new ngv6-ivy --minimal
## Update Angular version
Update all Angular packages to v6
$ ng version _ _ ____ _ ___
/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|
/ △ \ | '_ \ / _` | | | | |/ _` | '__| | | | | | |
/ ___ \| | | | (_| | |_| | | (_| | | | |___| |___ | |
/_/ \_\_| |_|\__, |\__,_|_|\__,_|_| \____|_____|___|
|___/
Angular CLI: 1.7.0-beta.1
Node: 8.9.3
OS: darwin x64
Angular: 6.0.0-beta.1
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router@angular/cli: 1.7.0-beta.1
@angular-devkit/build-optimizer: 0.0.42
@angular-devkit/core: 0.0.29
@angular-devkit/schematics: 0.0.52
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.10.0-beta.1
@schematics/angular: 0.1.17
typescript: 2.5.3
webpack: 3.10.0
## Enable Ivy
- add
enableIvy
tosrc/tsconfig.app.json
- remove
BrowserModule
fromAppModule
(workaround for beta.1) - simplify
AppComponent
(workaround for beta.1) - add
ngc
script intopackage.json
- set
target: es2016
oftsconfig.json
(optional)
https://github.com/lacolaco/ngv6-ivy/commit/e8be181d08d361fbd51e313e62b98053701c507e
## Run ngc
$ yarn ngc -p src/tsconfig.app.json
## Look at the outputs
The outputs are in tsc-out
directory
### Discover Ivy: ngComponentDef
Open tsc-out/app/src/app/app.component.js
.
https://github.com/lacolaco/ngv6-ivy/blob/master/out-tsc/app/src/app/app.component.js#L1-L32
import { Component } from '@angular/core';
import * as i0 from '@angular/core';
export class AppComponent {
constructor() {
this.greeting = 'World';
}
}
AppComponent.decorators = [
{
type: Component,
args: [
{
selector: 'app-root',
template: 'Hello {{greeting}}!'
}
]
}
];
/** @nocollapse */
AppComponent.ctorParameters = () => [];
AppComponent.ngComponentDef = i0.ɵdefineComponent({
tag: 'app-root',
factory: function AppComponent_Factory() {
return new AppComponent();
},
template: function AppComponent_Template(ctx, cm) {
if (cm) {
i0.ɵT(0);
}
i0.ɵt(0, i0.ɵb1('Hello ', ctx.greeting, '!'));
}
});
//# sourceMappingURL=app.component.js.map
The essence is AppComponent.ngComponentDef
, which is a component definition using Ivy APIs.
The template
function is generated from the component’s HTML template.
We will be able to write this definition in our component classes when Ivy will be stable. Then, the current HTML template will be optional. we can choose decorator-less components, which is written in pure JavaScript.