Entfernen Sie Abhängigkeiten automatisch aus package.json, wenn Sie npm deinstallieren


84

Nachdem npm initich Abhängigkeiten in meiner package.json hinzufügen kann, gehen Sie folgendermaßen vor:

npm install package --save

Und sagen Sie, ich möchte uninstalldas Paket und ich tue dies, indem ich:

npm uninstall package

Ich möchte jedoch, dass meine package.json auch entsprechend aktualisiert wird, ohne dass ich manuell zur Datei gehen und diese Zeile löschen muss.

In den npm-Dokumenten heißt es:

Es ist streng additiv und löscht daher keine Optionen aus Ihrer package.json ohne einen wirklich guten Grund dafür.

Ich wollte nur wissen, ob dies überhaupt möglich ist.


Da meine Abhängigkeiten bei jeder Installation mit dem Flag (--save) automatisch zu package.json hinzugefügt werden, habe ich mich gefragt, ob es eine Möglichkeit gibt, Abhängigkeiten aus package.json zu entfernen, wenn ich das Paket ebenfalls deinstalliere.
Schrei

Antworten:


150

Verwenden Sie die gleiche --saveFlagge. Wenn Sie eine Abhängigkeit installiert haben mit:

$> npm install grunt-cli --save

Sie können es deinstallieren, wobei package.json aktualisiert wird, indem Sie Folgendes verwenden:

$> npm uninstall grunt-cli --save

Das 'save'-Flag weist npm an, package.json basierend auf der Operation zu aktualisieren, die Sie gerade ausgeführt haben.


3
Ich benutze npm mit ember-cli und musste --save-devstattdessen verwenden --save.
Gerry3

4
Wenn Sie es mit --save-dev installiert haben, ist die Deinstallation auch --save-dev, da --save im dependenciesAbschnitt der Datei package.json speichert, während --save-dev im devDependenciesAbschnitt
Mike '

7
Ich bin weit gekommen, seit ich diese Frage gestellt habe, und hier ist ein kleiner Tipp. Sie können verwenden npm i <package_name> -S, um zu Ihrer dependenciesListe npm i <package_name> -Dhinzuzufügen oder um zu Ihrer hinzuzufügen dev-dependencies. Die gleiche Flagge gilt für die Entfernung mit npm rm <package_name> -Sodernpm rm <package_name> -D
Schrei

1
Beachten Sie jedoch, dass dies einfach die Kurzflaggen für --save und --save-dev sind. Siehe npm helpfür alle Flaggen und ihre Kurzformäquivalente. (Alles, was mit -S oder --save installiert und auch mit entweder deinstalliert werden kann, wird von npm nicht als unterschiedlich angesehen. Nur "weniger
tippen

1
Du bist ein Heiliger unter den Männern.
John Von Neumann

0

In meinem Fall hat --save den Eintrag aus package.json nicht gelöscht. Der von ionic-check vorgeschlagene Befehl wird meiner Meinung nach nicht aktualisiert, wenn die Deinstallation mit Fehlern beendet wird. Package.json wird nicht aktualisiert. In diesem Fall haben Sie nur eine Option package.json manuell zu ändern, ist mühsam, aber der einzige Weg, den ich denke

AKTUALISIEREN

Wenn Sie ein Paket deinstallieren, das von einem anderen aktiven Paket abhängig ist, kann die Deinstallation in diesem Fall mit Fehlern / Warnungen fehlschlagen. Die sichere Methode besteht darin, dem folgenden Abhängigkeitsdiagramm zu folgen und nicht sicher zu sein, ob ein Tool verfügbar ist, ein praktisches Tool unter solchen Vorgängen, Warnung Nachrichten sind ziemlich irreführend, obwohl "Sie müssen Peer-Abhängigkeiten installieren ..." keinen Sinn ergibt, wenn wir ein Paket deinstallieren


1
Dies sollte nicht notwendig sein: Wenn es in der dependenciesListe enthalten ist, uninstall --save sollte es entfernt werden, unabhängig davon, ob etwas anderes davon abhängt. NPM verwendet eine ziemlich clevere Abhängigkeitsreduzierung. Wenn Sie also X (explizit) in Ihrer Abhängigkeitsliste haben und X --save deinstallieren, wird es entfernt. Beachten Sie jedoch, dass es mehrere Abhängigkeitslisten und --saveist nicht das gleiche wie --save-dev, --save-prododer --save-optional. Auch ja: Wenn dies uninstallzu Fehlern führt, stoppt NPM bei diesem Fehler. Es wird nicht versucht, fortzufahren, da es die Richtigkeit nicht mehr garantieren kann.
Mike 'Pomax' Kamermans
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.