angular - Angular AOT 产生 NG8001、NG8002 和 NG8003 错误
问题描述
我正在开发一个正在生产中的中型企业 Angular 应用程序。在为我的最新更改进行 PR 之前,我使用 AOT 运行构建以确保在 PR 合并时应用程序不会在构建步骤中中断。当我在没有 AOT 标志的情况下构建项目时,它会正确构建并且一切都很好。当我添加 AOT 标志时,我从应用程序中的几乎每个组件中得到数百个 NG8001、NG8002 和 NG8003 错误。很难说,因为有太多错误导致终端输出被截断。
其中许多错误似乎与无法绑定到 ngModel 和 ngForm 有关。但这从未发生过,我的模块导入 FormsModule。我已遵循此处找到的建议:https ://angular.io/errors/NG8001但无济于事。我不知道问题可能是什么。这个问题的原因是什么?我该如何解决?
编辑 - 附加信息
我能够得到一个完整的输出,现在有了更多的信息,我相信这些信息可以让我们更接近真正的问题。
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,
multi: true,
deps: [HttpClient],
},
{
provide: LoggerConfigurationToken,
useValue: { level: config.logLevel },
},
{
provide: LoggerService,
},
],
};
}
}
export interface LoggerModuleConfig
{
logLevel: LogLevel,
url: string
}
解决方案
推荐阅读
- reactjs - 从签名的 S3 URL 获取数据:`不存在 'Access-Control-Allow-Origin' 标头`
- r - 将 RMarkdown 编入工作文档时出错,可能是由于安装了软件包
- java - Java在FileWriter中获取文件名
- java - 我如何使用 xpath 使用 if else 语句
- asp.net - 找到更新用户角色的代码,但不显示 [HttpGet] 方法或 ViewPage
- python - 如何以有效的方式编写此 MongoDB 查询?
- java - 使用返回方法交换连续索引中的值
- google-bigquery - 语法错误:在 BigQuery 上 [20:46] 应为“(”或“,”或关键字 SELECT,但在 [20:46] 得到“;”
- neo4j - Neo4j - 从密码返回伪关系
- reactjs - Switch 无法在反应路由器中渲染组件