我现在使用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”不打印错误?
我想我的脑袋前面有一块板子。
答案 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文件时自动执行此重写。