5

在我的模块上运行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:

我的设置如下:一个MyModuleA成功构建的模块,MyModuleB一个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

现在我可以包含IonicModuleMyModuleB一个illegal state error(这次链接到翻译模块),但我根本没有使用这些模块,MyModuleB为什么我需要全部导入它们?

4

1 回答 1

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
      ]
    }
  }
}

如果有人知道为什么,请随时启发我:)

于 2018-03-22T11:00:49.140 回答