非法状态:无法加载指令NgClass的摘要

时间:2018-01-05 08:38:26

标签: angular angular-compiler

在我的模块上运行ngc时,它使用angular 4.4.3(和编译器4.4.3)工作正常。现在我升级到5.0.0(角度和编译器),我有以下错误:

  

错误:非法状态:无法在[...] / node_modules/@angular/common/common.d.ts中加载指令NgClass的摘要。

我的tsconfig.json文件如下所示:

{
  "compilerOptions": {
    "baseUrl": ".",
    "declaration": true,
    "stripInternal": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "module": "es2015",
    "moduleResolution": "node",
    "outDir": "[...]/",
    "paths": {...},
    "rootDir": "[...]/plugins/",
    "target": "es5",
    "skipLibCheck": true,
    "lib": [
      "es2015",
      "dom"
    ],
    "sourceMap": true,
    "inlineSources": true,
    "noImplicitAny": true
  },
  "files": [
    "[...]/plugins/users/index.ts"
  ]
}

我不知道从我正在尝试编译的文件中导致问题的原因。我在这里和那里看到过类似的错误,但是直接与公共模块无关。发布样本以重现错误很困难,因为它不会在其他模块上发生

编辑1:

我的设置如下:一个成功构建的模块MyModuleAMyModuleB使用不构建的MyModuleA

@NgModule({
  imports: [
    CommonModule,
    IonicModule,
    TranslateModule.forChild()
  ]
})
export class MyModuleA {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: MyModuleA,
      providers: [
        ModuleAService
      ]
    };
  }
}

@NgModule({
  imports: [
    HttpClientModule,
    MyModuleA
  ]
})
export class MyModuleB {
  /**
   * Instantiate module (for main module only).
   */
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: MyModuleB,
      providers: [
        ModuleBService
      ]
    }
  }
}

如果我在CommonModule中加入MyModuleB,我还有其他错误:

Error: Illegal state: Could not load the summary for directive ActionSheetCmp in [...]/node_modules/ionic-angular/components/action-sheet/action-sheet-component.d.ts

现在我可以在IonicModule中添加MyModuleB以获得下一个illegal state error(此时链接到翻译模块),但我在{{1}中根本不使用这些模块那么为什么我需要全部导入它们呢?

1 个答案:

答案 0 :(得分:1)

所以我不确定这背后的原因是什么,这很烦人,但似乎每个导入的模块都需要由子模块导入或从父模块导出。所以在我的例子中,解决方案是:

@NgModule({
  imports: [
    CommonModule,
    IonicModule,
    TranslateModule.forChild()
  ],
  exports: [
    CommonModule,
    IonicModule,
    TranslateModule
  ]
})
export class MyModuleA {
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: MyModuleA,
      providers: [
        ModuleAService
      ]
    };
  }
}

@NgModule({
  imports: [
    HttpClientModule,
    MyModuleA
  ]
})
export class MyModuleB {
  /**
   * Instantiate module (for main module only).
   */
  static forRoot(): ModuleWithProviders {
    return {
      ngModule: MyModuleB,
      providers: [
        ModuleBService
      ]
    }
  }
}

如果有人知道原因,请随时赐教:)