Angular 角度编译器选项

Angular 角度编译器选项,angular,angular-compiler,Angular,Angular Compiler,我正在寻找一些列出的角度编译器选项的解释: useDebug-打开调试 使用JIT-不清楚(仅在中使用) DefaultEn封装-设置默认样式封装 提供程序-不太清楚(与ngModule decorator相同吗?) missingTranslation-策略如果缺少翻译密钥,该怎么办 enableLegacyTemplate-支持模板标记(已弃用) 使用JIT 是使用codegen还是解释模式 Codegen是默认模式,因此我们可以在浏览器开发工具中看到输出。在此模式下,angular将编译

我正在寻找一些列出的角度编译器选项的解释:

  • useDebug-打开调试
  • 使用JIT-不清楚(仅在中使用)
  • DefaultEn封装-设置默认样式封装
  • 提供程序-不太清楚(与ngModule decorator相同吗?)
  • missingTranslation-策略如果缺少翻译密钥,该怎么办
  • enableLegacyTemplate-支持
    模板
    标记(已弃用)
使用JIT 是使用codegen还是解释模式

Codegen是默认模式,因此我们可以在浏览器开发工具中看到输出。在此模式下,angular将编译期间收集的所有语句转换为浏览器内存中包含可执行代码的文件

我知道有三个地方使用了这个选项

  • 模块工厂生成

    ng:///AppModule/module.ngfactory.js

  • 组件工厂生成

    ng:///AppModule/Component\u Host.ngfactory.js

    ng:///AppModule/Component.ngfactory.js

  • 样式URL
    代码生成

    ng:///css/0app/app.css.ngstyle.js

解释模式意味着angular将像解释器一样工作。在前面的步骤(词法分析、解析、语义分析、优化)中生成的语句将直接执行。Angular不会像在codegen模式中那样将代码转换为组件和模块。相反,angular为工厂使用特殊包装,即

function _declareFn(
    varNames: string[], statements: o.Statement[], ctx: _ExecutionContext,
    visitor: StatementInterpreter): Function {
  return (...args: any[]) => _executeFunctionStatements(varNames, args, statements, ctx, visitor);
}
然后它将在每次必要时执行这些包装(例如,当您处理事件时,当angular正在运行
updateDirectives
updateRenderer
等),并且每次都将使用
StatementVisitor
遍历所有语句

最初解释模式也用于
DART
,但现在这种模式几乎不被使用


提供者 如果我们有两个具有相同令牌的提供商,则第二个提供商“获胜”

因此,
提供者
选项是覆盖默认值的一个很好的功能

例如,我们可以

1) 自定义
DomElementSchema

2) 使用特定的
DirectiveResolver
覆盖模板

3) 覆盖
ResourceLoader

4) 重写
解析器
模板解析器
,以可视化编译器的工作

等等

我们不能对NgModule提供程序执行同样的操作,因为编译器使用专用的注入器(下图中的JIT编译器注入器),并且编译在解析
@NgModule
提供程序之前进行

假设我们有这样的应用程序:

my-app
  level1
    level2
      level3
然后依赖项解析算法将如下所示:

如果我们对所有级别都使用延迟加载

它将转变为

为了简化,我在图中省略了
路由器出口
喷油器

有关更多详细信息,请参见设计文档:

使用JIT 是使用codegen还是解释模式

Codegen是默认模式,因此我们可以在浏览器开发工具中看到输出。在此模式下,angular将编译期间收集的所有语句转换为浏览器内存中包含可执行代码的文件

我知道有三个地方使用了这个选项

  • 模块工厂生成

    ng:///AppModule/module.ngfactory.js

  • 组件工厂生成

    ng:///AppModule/Component\u Host.ngfactory.js

    ng:///AppModule/Component.ngfactory.js

  • 样式URL
    代码生成

    ng:///css/0app/app.css.ngstyle.js

解释模式意味着angular将像解释器一样工作。在前面的步骤(词法分析、解析、语义分析、优化)中生成的语句将直接执行。Angular不会像在codegen模式中那样将代码转换为组件和模块。相反,angular为工厂使用特殊包装,即

function _declareFn(
    varNames: string[], statements: o.Statement[], ctx: _ExecutionContext,
    visitor: StatementInterpreter): Function {
  return (...args: any[]) => _executeFunctionStatements(varNames, args, statements, ctx, visitor);
}
然后它将在每次必要时执行这些包装(例如,当您处理事件时,当angular正在运行
updateDirectives
updateRenderer
等),并且每次都将使用
StatementVisitor
遍历所有语句

最初解释模式也用于
DART
,但现在这种模式几乎不被使用


提供者 如果我们有两个具有相同令牌的提供商,则第二个提供商“获胜”

因此,
提供者
选项是覆盖默认值的一个很好的功能

例如,我们可以

1) 自定义
DomElementSchema

2) 使用特定的
DirectiveResolver
覆盖模板

3) 覆盖
ResourceLoader

4) 重写
解析器
模板解析器
,以可视化编译器的工作

等等

我们不能对NgModule提供程序执行同样的操作,因为编译器使用专用的注入器(下图中的JIT编译器注入器),并且编译在解析
@NgModule
提供程序之前进行

假设我们有这样的应用程序:

my-app
  level1
    level2
      level3
然后依赖项解析算法将如下所示:

如果我们对所有级别都使用延迟加载

它将转变为

为了简化,我在图中省略了
路由器出口
喷油器

有关更多详细信息,请参见设计文档:


非常感谢您如此详细的回答!谢韦劳