webentwicklung-frage-antwort-db.com.de

Angular CLI 6: Speicherort für Bibliotheksabhängigkeiten

Ich konvertiere eine Bibliothek ( ng-app-state ), um die angular cli zu verwenden, jetzt, da v6 Bibliotheken unterstützt (yay! ).

Nach dem Gerüstbau und dem Kopieren von Code ist hier meine erste Frage:

Wie/wo füge ich Abhängigkeiten von Drittanbietern hinzu?

Zu package.json, oder zu projects/ng-app-state/package.json?

38
Eric Simonton

Es stellt sich heraus, dass die Antwort "beides" ist. Das Verständnis der Antwort ergibt sich daraus:

  • package.json Wird während der Entwicklung verwendet. Sie installieren hier tatsächlich alle Bibliotheken für Ihren eigenen Gebrauch, einschließlich der Bibliotheken, die Benutzer ebenfalls benötigen. Sie sollten nur ein node_modules/ - Verzeichnis im Stammverzeichnis Ihres Projekts haben, nicht im Bibliotheksverzeichnis (also nur npm install Und ähnliches hier ausführen).
  • projects/ng-app-state/package.json Wird in npm bereitgestellt (mit einigen zusätzlichen Feldern, die vom Erstellungsprozess hinzugefügt wurden). Kopieren Sie also die dependencies und/oder peerDependencies, die Benutzer Ihrer Bibliothek benötigen. Es macht keinen Sinn, devDependencies hierher zu setzen.

Das ist die vollständige Antwort. Lesen Sie weiter, um ein Beispiel zu sehen.

In meinem Fall hat package.json Eine lange Liste von vielen dependencies und devDependencies (Sie können es sehen hier ), aber all dies wirkt sich nur auf mich aus (und jeder, der einen Beitrag zu ng-app-state leisten möchte). projects/ng-app-state/package.json Ist viel kleiner und dies betrifft Benutzer meiner Bibliothek:

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

Nachdem Sie ng build np-app-state --prod Ausgeführt haben, um das zu generieren, was für npm freigegeben wird, endet dies in dist/ng-app-state/ (Was veröffentlicht werden sollte):

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

Es sollte in package.json Als peerDependencies hinzugefügt werden

12
Lal

Die Abhängigkeiten von Drittanbietern sollten in dependencies von projects/ng-app-state/package.json Platziert werden.

Wenn die Abhängigkeiten von Drittanbietern jedoch auch ng 6 unterstützen, haben Sie eine andere Frage und mehr Komplexität als in dieser Frage angegeben. Ich werde kurz sagen, dass Sie möglicherweise ng update für ihre Bibliotheken aufrufen oder Schaltpläne entwickeln müssen, die sie aufrufen, die erwarten, dass ihre ng 6-Version der Bibliothek vorhanden ist.

1
bhantol