This page关于模块声明有两种引导方法 - 动态和静态。它们仅在main.ts
:
// 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'
。
答案 0 :(得分:1)
您不只是导入不同的模块:整个设置不同。
在动态广告中,您的AppModule
是通过platformBrowserDynamic
加载程序加载的。该对象知道如何JIT编译应用程序中的其余模块。
在静态方案中,您改为向AppModuleNgFactory
加载程序提供platformBrowser
。这个其他对象知道在哪里可以找到应用程序的AOT编译文件。
以这种方式思考:角度无法在现场决定是否使用AOT编译器,因为它不会提前 ! 做的决定是搜索现有的已编译文件,还是在本地生成它们。预编译的文件已经存在:它只是追求它们的问题。
至于决定是否编译文件AOT,请注意Typescript编译器配置(存储在tsconfig.json
中)也不同。 angularCompilerOptions
部分启用AOT编译。
文档:https://angular.io/docs/ts/latest/cookbook/aot-compiler.html