typescript - Angular 2/4/5 - Kompilering i förväg hur man
Jag försöker starta min Angular 2 RC5-applikation enligt denna guide https://angular.io/docs/ts/latest/guide/ngmodule.html Nedan är min kod
import { AppModuleNgFactory } from './app.module.ngfactory';
import {platformBrowser} from "@angular/platform-browser";
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
Men när jag försökte kompilera TypeScript-kod fick jag följande fel
app\main.ts(1,36): fel TS2307: Kan inte hitta modulen './app.module.ngfactory'.
Hur kan jag generera filen app.module.ngfactory? Vilket verktyg ska jag använda?
Svar #1
Både JIT- och AOT-kompilatorerna genererar en AppModuleNgFactory-klass från samma AppModule-källkod.
JIT-kompilatorn skapar den fabriksklassen i farten, i minnet, i webbläsaren. AOT-kompilatorn skriver ut fabriken till en fysisk fil som vi importerar här i den statiska versionen av main.ts
På en övergripande nivå tillhandahåller @angular/compiler-cli ett omslag runt Typescripts tsc-kompilator, och både AoT kompilera din applikations kod, och sedan transpilera din applikations Typescript till Javascript:
ngc -p src
Detta genererar en ny fil för varje komponent och modul (kallad en NgFactory)
För att köra din app i AoT-läge, allt som krävs är att ändra din main.ts-fil från
import {platformBrowserDynamic} from ‘@angular/platform-browser-dynamic’
import {MyAppModule} from ‘./app’
platformBrowserDynamic().bootstrapModule(MyAppModule);
till
import {platformBrowser} from ‘@angular/platform-browser’
import {MyAppModuleNgFactory} from ‘./app.ngfactory’ //generated code
platformBrowser().bootstrapModuleFactory(MyAppModuleNgFactory);
REDIGERA:
För att använda ngc-kommandot, installera först dessa-
npm install @angular/compiler-cli typescript@next @angular/platform-server @angular/compiler
ngc är en drop-in ersättning för tsc som du hittar i mappen ./node_modules/.bin/ngc.
Svar #2
2017 UPPDATERING
Från och med januari 2017 Om du använder angular-cli, är AOT-kompilering nu standardmetoden för kompilering när följande kommando körs ng build --prod utan krav på kodändringar.
Om du vill inaktivera AOT och istället använda JIT i produktion, kan du använda ng build --prod --no-aot.
Källa: https://github.com/angular/angular-cli/issues/4138
Detta innebär att du fortfarande kan använda JIT-kompilering medan du utvecklar (kommer att kompilera snabbare så ganska praktiskt) med ng build och lämna dina .ts som något i stil med detta:
// The browser platform with a compiler
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
// The app module
import { AppModule } from './app/app.module';
// Compile and launch the module
platformBrowserDynamic().bootstrapModule(AppModule);
Sammanfattningsvis:
ng build // build with JIT
ng build --prod --no-aot // build with JIT
ng build --prod // build with AOT
