Angular AOT 产生 NG8001、NG8002 和 NG8003 错误

问题描述

我正在开发一个正在生产的中型企业 Angular 应用。在为我的最新更改创建 PR 之前,我使用 AOT 运行构建,以确保在合并 PR 时应用程序不会在构建步骤中中断。当我在没有 AOT 标志的情况下构建项目时,它构建正确并且一切正常。当我添加 AOT 标志时,我从应用程序的几乎每个组件中得到数百个 NG8001、NG8002 和 NG8003 错误。很难说,因为错误太多以至于终端输出被截断。

以下是一些错误的示例:

Error screen 1

这些错误中的许多似乎与无法绑定到 ngModel 和 ngForm 有关。但这以前从未发生过,我的模块导入了 FormsModule。我遵循了此处找到的建议:https://angular.io/errors/NG8001 但无济于事。我不知道可能是什么问题。这个问题的原因是什么?我该如何解决

编辑 - 附加信息

我能够获得完整长度的输出,现在有了更多的信息,我相信这些信息使我们更接近真正的问题。

Error screen 2

LoggerModule 实际上就是我在这个 PR 中添加代码。我不明白错误是什么以及为什么它只会在使用 AOT 编译时出现。

这是 LoggerModule 的代码

import { HttpClient } from '@angular/common/http';
import { ModuleWithProviders,NgModule } from '@angular/core';
import { CapturedPayload } from './captured-payload';
import { LogLevel } from './log-level';
import { LoggerConfigurationToken } from './logger-configuration';
import { LoggerService } from './logger.service';
import { TransportTemplate } from './transport-template';
import { TransporterToken } from './transporter';
import { ConsoleTransporter } from './transporters/console.transporter';
import { HttpTransporter } from './transporters/http.transporter';

function consoleTransporterFactory() {
  return new ConsoleTransporter();
}

@NgModule()
export class LoggerModule {
  static config(config: LoggerModuleConfig): ModuleWithProviders<LoggerModule> {
    const httpTransporterFactory = (httpClient: HttpClient) => {
      const template: TransportTemplate = <T>(payload: CapturedPayload) => {
        return ({ ...payload,timestamp: payload.timestamp.toISOString() } as unkNown) as T;
      }
        
      const transporterConfig = { url: config.url };
      return new HttpTransporter(template,httpClient,transporterConfig);
    }



    return {
      ngModule: LoggerModule,providers: [
        {
          provide: TransporterToken,useFactory: consoleTransporterFactory,multi: true,},{
          provide: TransporterToken,useFactory: httpTransporterFactory,deps: [HttpClient],{
          provide: LoggerConfigurationToken,useValue: { level: config.logLevel },{
          provide: LoggerService,],};
  }
}

export interface LoggerModuleConfig
{
  logLevel: LogLevel,url: string
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)