问题描述
我正在开发一个正在生产的中型企业 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,deps: [HttpClient],{
provide: LoggerConfigurationToken,useValue: { level: config.logLevel },{
provide: LoggerService,],};
}
}
export interface LoggerModuleConfig
{
logLevel: LogLevel,url: string
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)