2016-11-14 81 views
1

This page關於模塊指出有兩種引導方式 - 動態和靜態。他們只能設定在main.ts角度如何定義是否應使用aot編譯器

// The browser platform with a compiler 
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 

// The app module 
import { AppModule } from './app.module'; 

// Compile and launch the module 
platformBrowserDynamic().bootstrapModule(AppModule); 

與靜態(AOT編譯器):

// The browser platform without a compiler 
import { platformBrowser } from '@angular/platform-browser'; 

// The app module factory produced by the static offline compiler 
import { AppModuleNgFactory } from './app.module.ngfactory'; 

// Launch with the app module factory. 
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory); 

我的問題是如何角知道,AOT編譯器應該使用?似乎沒有選擇來表明這一點。我懷疑它解析main.ts並檢查我是否使用了@angular/platform-browser'@angular/platform-browser-dynamic'

回答

1

你不只是導入一個不同的模塊:整個設置是不同的。

在動態方案中,您的AppModule通過platformBrowserDynamic加載程序加載。該對象知道如何在應用程序中對其餘模塊進行JIT編譯。

在靜態場景中,您改爲向platformBrowser加載程序提供AppModuleNgFactory。這個其他對象知道在哪裏可以找到應用程序的AOT編譯文件。

想想這樣:角度不能當場決定是否使用AOT編譯器,因爲那不會是提前確實是決定的是搜索現有的編譯文件還是在本地生成它們。預編譯的文件已經存在:這只是一個追蹤或不追蹤的問題。

至於決定是否編譯文件AOT,請注意Typescript編譯器配置(存儲在tsconfig.json)也是不同的。 angularCompilerOptions部分啓用AOT編譯。

文檔:https://angular.io/docs/ts/latest/cookbook/aot-compiler.html

+0

感謝,但'AppModuleNgFactory'由編譯器生成的,不是嗎?所以在'@ angular/platform-b​​rowser';'和這一行'從'./app.module.ngfactory'導入{AppModuleNgFactory}這行'import {platformBrowser};'決定使用aot。沒有? –

+0

我添加了一個段落來完成答案=) – slezica

+0

謝謝,所以它們有點誤導他們如何表達它。這實際上是從您提供的鏈接執行所有其他衆多步驟之後的最後一步。當然''AppModuleNgFactory'在'ngc'編譯之後就緒,甚至在'@ angular/platform-b​​rowser'這行'import {platformBrowser}'之前就已經準備好了;'我正在處理 –