5 votes

État illégal : Impossible de charger le résumé de la directive NgClass

En cours d'exécution ngc sur mon module, il fonctionnait bien avec angular 4.4.3 (et le compilateur 4.4.3). Maintenant j'ai mis à jour vers 5.0.0 (à la fois angular et le compilateur) et j'ai l'erreur suivante :

Erreur : État illégal : Impossible de charger le résumé de la directive NgClass dans [...]/node_modules/@angular/common/common.d.ts.

Mon fichier tsconfig.json ressemble à ceci :

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

Je ne sais pas ce qui peut causer le problème dans le fichier que j'essaie de compiler. J'ai vu des erreurs similaires ici et là, mais pas directement liées au module commun. Il est difficile de poster un exemple pour reproduire l'erreur car elle ne se produit pas avec d'autres modules.

Editer 1 :

Ma configuration est la suivante : un module MyModuleA qui se construit avec succès, MyModuleB qui utilise MyModuleA qui ne construit pas.

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

Si j'inclus CommonModule en MyModuleB J'ai une autre erreur :

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

Je peux maintenant inclure IonicModule en MyModuleB d'avoir le prochain illegal state error (cette fois lié au module translate), mais je n'utilise pas du tout ces modules dans MyModuleB Alors pourquoi dois-je tous les importer ?

1voto

Guillaume Points 308

Je ne sais pas exactement quelle est la raison de cette situation, c'est assez ennuyeux, mais il semble que chaque module importé doive être soit importé par un sous-module, soit exporté à partir du module parent. Donc dans mon exemple la solution serait de faire :

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

Si quelqu'un sait pourquoi, n'hésitez pas à m'éclairer :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X