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

に含めるCommonModuleMyModuleB、別のエラーが発生します。

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(今回は翻訳モジュールにリンク) を含めることができますが、これらのモジュールをまったく使用し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 に答える