Angular 提前编译问题

Angular Ahead-of-Time Compilation Problems

我正在尝试设置我的应用程序以进行 AOT 编译以准备发布。当然,代码在 JIT 中编译得很好。

在 AOT 中,我收到很多如下所示的错误:

错误:无法绑定到 'lead',因为它不是 'app-output-edit' 的已知 属性。 1. 如果 'app-output-edit' 是一个 Angular 组件并且它有 'lead' 输入,那么验证它是这个模块的一部分。 2. 如果 'app-output-edit' 是 Web 组件,则将 'CUSTOM_ELEMENTS_SCHEMA' 添加到此组件的“@NgModule.schemas”以抑制此消息。 3. 要允许任何 属性 添加 'NO_ERRORS_SCHEMA' 到此组件的“@NgModule.schemas”。

在我的例子中,Lead 是我的 OutputEditComponent 的 public @Input() 属性。

我在网上找到的关于这个主题的大多数帖子都在谈论确保组件在您的组件或功能模块中声明。我没有使用功能模块。我有一个根模块 (app.module.ts) 和一个路由模块 (app-routing.module.ts)。另外,我有一个模拟模块。我的所有组件都是根模块中的声明。

我也通过其他绑定获得它。就像无法绑定到 'formGroup' 因为它不是 'div'

的已知 属性

我收到了 "No provider for ControlContainer" 和 "No provider for NgControl" 之类的错误。

最后,我遇到了第 3 方组件的错误,例如 ng-bootstrap: "Can't bind to 'items' since it isn't a known property of ng-select"。哦,但它是...

更新 - 我能够解决除第一个错误之外的所有错误:无法绑定到 'X' 因为它不是 'Y' 的已知 属性。大多数情况下,我们只是遇到了源自 html 标记的错误:引用组件的私有属性、在没有所有参数的情况下调用方法等。仍在努力。

谢谢。

所以在我的例子中,事实证明我的模拟模块干扰了一切。我们已经为自动化测试设置了一个模拟模块,可能是不正确的,它只是坐在那里,因为我们还没有真正进行集成测试。

当心模拟模块!它在嘲笑你的 AOT!

和平与良好的编码。

亚伦