web-dev-qa-db-fra.com

Angular CLI 6: Où placer les dépendances de bibliothèque

Je suis en train de convertir une bibliothèque ( ng-app-state ) pour utiliser le angular cli, maintenant que la v6 prend en charge les bibliothèques (yay!).

Après avoir échafaudé et copié du code, voici ma première question:

Comment/où puis-je ajouter des dépendances tierces?

Pour package.json ou pour projects/ng-app-state/package.json?

38
Eric Simonton

Il s'avère que la réponse est un peu "les deux". Comprendre la réponse provient de ceci:

  • package.json est ce qui sera utilisé lors du développement. En fait, vous installez ici toutes vos bibliothèques pour votre propre usage, y compris celles dont les utilisateurs auront également besoin. Vous ne devriez avoir qu'un répertoire node_modules/ à la racine de votre projet, pas dans le répertoire de la bibliothèque (donc, exécutez uniquement npm install et similaire ici).
  • projects/ng-app-state/package.json est ce qui sera déployé sur npm (avec quelques champs supplémentaires ajoutés par le processus de construction). Copiez donc dans le dependencies et/ou peerDependencies dont les utilisateurs de votre bibliothèque auront besoin. Il est inutile de placer devDependencies ici.

C'est la réponse complète. Lisez la suite pour voir un exemple.

Dans mon cas, package.json a une longue liste de beaucoup dependencies et devDependencies (vous pouvez le voir ici ), mais tout cela ne me touche (et qui veut contribuer à ng-app-state). projects/ng-app-state/package.json est beaucoup plus petit, et c'est ce qui affecte les utilisateurs de ma bibliothèque:

{
  "name": "ng-app-state",
  "version": "8.0.0",
  "author": "Simonton Software",
  "license": "MIT",
  "repository": "simontonsoftware/ng-app-state",
  "peerDependencies": {
    "@angular/common": ">=6.0.0 <7.0.0",
    "@angular/core": ">=6.0.0 <7.0.0",
    "@ngrx/store": ">=6.0.0 <7.0.0",
    "micro-dash": ">=3.5.0 <4.0.0"
  }
}

Après avoir exécuté ng build np-app-state --prod pour générer ce qui sera publié dans npm, voici ce qui aboutira dans dist/ng-app-state/ (qui devrait être publié):

{
  "name": "ng-app-state",
  "version": "8.0.0",
  "author": "Simonton Software",
  "license": "MIT",
  "repository": "simontonsoftware/ng-app-state",
  "peerDependencies": {
    "@angular/common": ">=6.0.0 <7.0.0",
    "@angular/core": ">=6.0.0 <7.0.0",
    "@ngrx/store": ">=6.0.0 <7.0.0",
    "micro-dash": ">=3.5.0 <4.0.0"
  },
  "main": "bundles/ng-app-state.umd.js",
  "module": "fesm5/ng-app-state.js",
  "es2015": "fesm2015/ng-app-state.js",
  "esm5": "esm5/ng-app-state.js",
  "esm2015": "esm2015/ng-app-state.js",
  "fesm5": "fesm5/ng-app-state.js",
  "fesm2015": "fesm2015/ng-app-state.js",
  "typings": "ng-app-state.d.ts",
  "metadata": "ng-app-state.metadata.json",
  "sideEffects": false,
  "dependencies": {
    "tslib": "^1.9.0"
  }
}
25
Eric Simonton

Il devrait être ajouté dans package.json comme peerDependencies

12
Lal

Les dépendances de tiers doivent être placées dans dependencies de projects/ng-app-state/package.json

Toutefois, si les dépendances tierces prennent également en charge la version 6, vous avez une question différente et une complexité accrue qui dépasse le cadre de cette question. Je dirai brièvement que vous devrez peut-être appeler ng update sur leurs bibliothèques ou développer des schémas appelant les leurs qui s'attendent à ce que leur version ng 6 de la bibliothèque soit présente.

1
bhantol