仅使用我自己的模块静态解析符号值时遇到错误

时间:2017-06-13 19:38:54

标签: typescript angular-cli

  

ERROR in Error遇到静态解析符号值。调用功能' DataModule',不支持函数调用。考虑使用对导出函数的引用替换函数或lambda,解析DataModuleRoot中的符号E:/shopify-client/src/app/app.module.ts,解析AppModule中的符号E:/shopify-client/src/app/app.module.ts,解析符号AppModule in E:/shopify-client/src/app/app.module.ts

使用Angular CLI构建项目时,我一直收到此错误。令人沮丧的是,它每次启动ng serve时才出现一次,然后在后续更新时不会出错。但这通常意味着我不能只运行build命令,因为第一次运行会导致阻止文件输出的错误。 DataModule是我制作的模块,我使用Angular文档制作了forRoot方法。

export function DataModuleRoot(){
  return DataModule.forRoot({});
}

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent,
    NavtreeComponent,
    JsonifyPipe,
    DebugPipe,
    PanelsComponent,
    IsolateScrollDirective
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpModule,
    DataModuleRoot(),
    PagesModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

这是DataModule

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [],
  providers: [DataService]
})
export class DataModule {
  constructor( @Optional() @SkipSelf() parentModule: DataModule) {
    if (parentModule) {
      throw new Error(
        'DataModule is already loaded. Import it in the AppModule only');
    }
  }

  static forRoot( config: any = {}): ModuleWithProviders {
    const io: Function = function () { };
    const host = (window as any).devHost || config.host || location.origin
    const socket: Socket = false ? io(host) : {
      id: '',
      on: function () { },
      off: function () { },
      emit: function () { },
      isFailed: false
    };

    //;
    (window as any).socket = socket;
    return {
      ngModule: DataModule,
      providers: [
        {
          provide: DataServiceConfig,
          useValue: {
            socket: socket,
            host: host,
            globalCache: {},
            globalSettings: {},
          }
        }
      ]
    };
  }
}

我已经在StackOverflow上阅读了许多其他类似的问题,但没有一个回答我的问题。

  • 我没有使用任何外部库。这是我自己使用Angular IO文档编写的模块。
  • 我没有使用工厂。

1 个答案:

答案 0 :(得分:0)

整个问题实际上是我在同一个函数中有const声明。正如您所看到的,我可以在返回值中使用变量或函数调用,我只是无法在函数体中声明任何内容。这是AoT编译器的一个弱点。

Consumer