带有箭头功能的Angular 7生产版本(AOT)

时间:2018-11-23 14:56:16

标签: javascript angular typescript angular7 aot

我现在使用Angular JS和Angular 2+(混合应用程序)工作了3年,现在使用Angular CLI进行实验。 我想我对JIT和AOT非常了解。

https://angular.io/guide/aot-compiler

...说,“ AOT编译器不支持函数表达式和箭头函数”。 “ ng build --prod”将使用AOT构建应用程序。

我的情况:

我创建了一个新项目,实现了一个箭头功能,该功能在console.log中起作用。如果我使用“ ng build --prod”构建应用程序,则该应用程序可以正常运行(从/ dist文件夹开始),并且console.log可以打印。我还使用webpack捆绑分析器对其进行了分析,捆绑中没有编译器或其他任何东西(例如AOT应用程序)。

我的问题:

那么,该应用程序如何工作?为什么此箭头功能起作用?为什么“ ng build --prod”不打印错误?

我想我的脑袋前面有一块板子。

2 个答案:

答案 0 :(得分:2)

元数据表达式中,AOT收集器不支持箭头功能()=> new Server()。感谢@ R.Richards。

答案 1 :(得分:0)

以下语法将起作用,并且不会在 AOT

中给出任何错误
arrowFun = () => { };

但根据文档,它用于元数据表达式

AOT收集器不支持箭头功能()=> new Server(),在元数据表达式中。它在中生成一个错误节点 功能的位置。当编译器以后解释该节点时, 它报告一个错误,邀请您将箭头功能转换为 导出的功能。

您可以阅读here

来自文档

AOT编译器不支持函数表达式和箭头函数,也称为lambda函数。

考虑以下组件装饰器:

@Component({
  ...
  providers: [{provide: server, useFactory: () => new Server()}]
})

这将引发错误,要解决此问题,您可以使用

export function serverFactory() {
  return new Server();
}

@Component({
  ...
  providers: [{provide: server, useFactory: serverFactory}]
})

在版本5和更高版本中,编译器在发出.js文件时自动执行此重写。