web-dev-qa-db-fra.com

La construction de la bibliothèque échoue avec Angular 9

J'essaie de migrer cette bibliothèque https://github.com/flauc/angular2-notifications de Angular 2+ vers Angular = 9.

L'erreur d'origine concernait le ModuleWithProviders qui est devenu un type générique, donc je l'ai corrigé. J'ai également eu une erreur décrite ici https://github.com/angular/angular/issues/32352 que j'ai corrigé avec require('@angular/compiler-cli'); et maintenant je suis confronté à une autre erreur:

../node_modules/@angular/common/common.d.ts:115:22 - erreur NG6002: apparaît dans le NgModule.imports de SimpleNotificationsModule, mais n'a pas pu être résolu en une classe NgModule

Il est assez difficile pour moi de comprendre ce qui se passe car je n'ai jamais construit de bibliothèque auparavant, et la construction avec gulp semble être un peu hacky, car cette ligne ngc = require('@angular/compiler-cli/src/main').main fait référence à une fonction qui n'appartient pas à l'API publique.

Modifier:

En suivant l'idée dans les commentaires (et mon propre ressenti), j'ai essayé de construire sans gorgée:

  • A créé un angular.json fichier
  • Séparé index.ts en public_api.ts et simple-notifications.module.ts
  • A fait quelques changements dans la structure des fichiers et des dossiers

Mais j'ai toujours la même erreur exacte ...

Ma tentative: https://github.com/youkouleley/angular2-notifications J'essaie de construire cela avec ng build, les scripts dans package.json n'ont pas été mis à jour

4
Guerric P

J'ai compris ce qui n'allait pas, j'avais un projet Angular 8 (contenant un projet de bibliothèque) que j'ai mis à niveau vers Angular 9 (avec une bibliothèque également: ng générer un noyau de bibliothèque, j'ai d'abord créé un nouveau projet angular 9 pour comparer les différences avec mon projet réalisé avec ng 8, je me rends compte qu'il manque certaines choses, voici les étapes que je suivi: - Supprimer node_modules - Supprimer le dossier dist - Dans la bibliothèque de projet Angular 9 il y a un nouveau fichier appelé: tsconfig.lib.prod.json

{
  "extends": "./tsconfig.lib.json",
  "angularCompilerOptions": {
    "enableIvy": false
  }
}
  • Dans votre angular.json, ajoutez ce qui suit:
{
  ...
  "projects": {
     ...
     "configurations": {
            "production": {
              "tsConfig": "projects/core/tsconfig.lib.prod.json"
             }
      }
  ...
  }
}
  • exécutez ng build --prod, et tout fonctionnera: D

PS: dans ce cas, la bibliothèque est appelée "core"

0
Youness Houdass