2016-11-14 77 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}'之前就已经准备好了;'我正在处理 –