Verwalten von Updates der Abhängigkeiten im Node.js-Paket
Als Entwickler bei Tailwind Traders ist es wichtig, dass Sie unsere Pakete auf dem neuesten Stand halten. Dadurch wird sichergestellt, dass wir die neuesten Funktionen und Fixes verwenden. Dies trägt außerdem dazu bei, Sicherheitsrisiken zu vermeiden. In dieser Lektion erfahren Sie, wie Sie Abhängigkeiten in einem Node.js-Projekt verwalten. Sie erfahren, wie Sie Pakete aktualisieren, semantische Versionsverwaltung verwenden und mit Sicherheitsproblemen umgehen.
Überlegungen vor dem Aktualisieren eines Pakets
Berücksichtigen Sie vor dem Aktualisieren eines Pakets Folgendes:
- Art des Updates: Finden Sie heraus, ob es sich um einen kleineren Fix, eine neue Funktion oder eine wesentliche Änderung handelt, die Ihren Code unterbrechen könnte. Die semantische Versionsverwaltung kann Ihnen bei der Identifizierung helfen.
- Projektkonfiguration: Stellen Sie sicher, dass Ihr Projekt so eingestellt ist, dass es nur erwünschte Updates empfängt, um unerwartete Änderungen zu vermeiden.
- Sicherheit: Achten Sie auf potenzielle Sicherheitsrisiken. Verwenden Sie die npm-Überwachungsfunktion, um problematische Pakete zu identifizieren und zu aktualisieren.
- Tests: Stellen Sie sicher, dass Ihre Tests nach dem Update erfolgreich verlaufen. Wenn Sie noch keine Tests einsetzen, sollten Sie welche hinzufügen. Ihre Anwendung verhält sich nach einem Update möglicherweise anders. Tests überprüfen, ob das Verhalten korrekt ist.
Semantische Versionsverwaltung zum Definieren des Updateverhaltens
Die semantische Versionsverwaltung ist im Rahmen der Softwareentwicklung ein wichtiger Standard. Sie ist sowohl für das Veröffentlichen als auch für das Verwenden von npm-Paketen von Bedeutung. Darüber hinaus unterstützt sie Sie dabei, Risiken im Rahmen von Updates zu kontrollieren, indem sie die in einer neuen Version vorgenommenen Änderungen angibt. Eine Versionsnummer weist bestimmte Abschnitte auf, die diese Änderungen aufzeigen:
Versionstyp | Position | Syntax | Was passiert | Vorgehensweise für Updates |
---|---|---|---|---|
Major | 1. | x.0.0 oder * | Eine Änderung von 1.0.0 auf 2.0.0 deutet auf Breaking Changes hin. Es können Codeanpassungen erforderlich sein. | Mit sofortigen Updates auf die neueste Hauptversion einverstanden, wobei potenzielle Änderungen am Code akzeptiert werden. |
Minor | 2. | 1.x.1 oder ^ | Eine Änderung von 1.2.9 auf 1.3.0 führt neue Funktionen ein. Vorhandener Code sollte weiterhin funktionieren. Updates sind in der Regel sicher. | Mit neuen Funktionen einverstanden, aber keine Breaking Changes. |
Patch | Dritte | 1.1.x oder ~ | Eine Änderung von 1.0.7 auf 1.0.8 bedeutet Fehlerbehebungen. Updates sollten sicher sein. | Fehlerbehebungen werden akzeptiert. |
Kleine Node.js-Projekte können Sie problemlos auf die neuesten Versionen aktualisieren. Updates für größere Projekte sollten Sie jedoch sorgfältig bedenken. Sie können nicht immer automatisch erfolgen. Im Allgemeinen erleichtert das Aktualisieren kleinerer Abhängigkeiten mit weniger eigenen Abhängigkeiten den Prozess.
Bevor Sie eine oder mehrere Abhängigkeiten aktualisieren, sollten Sie Ihre package.json
-Datei so konfigurieren, dass ein vorhersagbares Verhalten auftritt, wenn Sie den Befehl npm update <name of dependency>
ausführen. Node.js verwendet über eine Reihe von Symbolen, mit denen Sie definieren können, wie Pakete aktualisiert werden sollen.
Aktualisieren eines Pakets mit der npm-Befehlszeilenschnittstelle
Sie können ein Paket entweder über den Befehl install
oder den Befehl update
in npm installieren. Diese Befehle sind inzwischen meist austauschbar. Zum Aktualisieren eines Pakets verwenden Sie in der Regel Folgendes:
- Aktuellste Version:
npm update <package name>@latest
. - Spezifische Version:
npm update <package name>@<optional version number>
.
Der Updateprozess hängt von zwei Faktoren ab:
- Versionsargument: Wenn im Befehl
npm update
eine Versionsnummer angegeben ist, ruft npm diese Version ab und installiert sie. - Eintrag in der Manifestdatei: Die
package.json
-Datei enthält Regeln zum Aktualisieren von Abhängigkeiten."dependencyName": "1.1.x"
bedeutet beispielsweise, dass npm die Version abruft, die diesem Muster entspricht.
Grundlegendes zur Versionsverwaltung
Drei Dateien steuern die Versionsverwaltung von Abhängigkeiten:
package.json
: Diese Datei definiert die Version des Pakets, das Sie verwenden möchten. Dies ist die Manifestdatei für Ihr Projekt. Sie enthält die Metadaten für Ihr Projekt, einschließlich der Abhängigkeiten.package-lock.json
: Diese Datei beschreibt die genaue Struktur, die generiert wurde, sodass bei nachfolgenden Installationen unabhängig von zwischenzeitlichen Änderungen an den Abhängigkeiten identische Strukturen generiert werden können. Diese Datei soll in Quellrepositorys committet werden.shrinkwrap.json
: Diese Datei wird vom CLI-Befehlnpm shrinkwrap
erstellt und ähneltpackage-lock.json
. Der Hauptunterschied zwischen den Befehlen besteht darin, dass die innpm-shrinkwrap.json
angegebenen Paketversionen nicht von Benutzer*innen überschrieben werden können. Darüber hinaus ist die Dateinpm-shrinkwrap.json
mit älteren Versionen von npm (Versionen 2–4) kompatibel, währendpackage-lock.json
mit npm ab Version 5 kompatibel ist. Daher können Sie bei der Wartung von Legacycodebasennpm-shrinkwrap.json
vorfinden. Die meisten Entwickler*innen verwendenpackage-lock.json
anstelle vonnpm-shrinkwrap.json
. Eine Ausnahme, beinpm-shrinkwrap.json
bevorzugt wird, stellen globale Installationen von Daemons und Befehlszeilentools dar, bei denen die Entwickler*innen sicherstellen möchten, dass die genauen Versionen der angegebenen Pakete installiert werden.
Beispiel für die Ermittlung der Paketversion
Stellen Sie sich ein Szenario vor, in dem Sie in Ihrem Code Version 1.2 verwenden, dann aber Version 1.4 veröffentlicht, was Ihren Code unterbricht. Wenn jemand Ihre App zu diesem Zeitpunkt installiert, wird sie nicht funktionsfähig sein. Wenn es jedoch eine package-lock.json
-Datei gibt, die Version 1.2 angibt, wird diese Version installiert.
Hier sehen Sie ein Beispiel zur Ermittlung der installierten Version eines Pakets:
- Wenn sich die Dateien
package.json
undpackage-lock.json
auf eine Versionsregel einigen, gibt es keinen Konflikt. Wenn beispielsweisepackage.json
1.x
undpackage-lock.json
Version 1.4 festlegt, wird Version 1.4 installiert. - Wenn
package.json
eine spezifischere Version wie zum Beispiel1.8.x
angibt, wird diepackage-lock.json
-Datei außer Kraft gesetzt, die die ältere Version 1.4 angibt. In diesem Fall wird Version 1.8.0 oder höher oder eine höhere Patchversion installiert (sofern verfügbar).
Suchen und Aktualisieren veralteter Pakete mit dem Befehl „npm outdated“
Der Befehl npm outdated
wird verwendet, um Pakete zu identifizieren, für die neuere Versionen verfügbar sind. Durch Ausführen des Befehls wird eine Liste dieser veralteten Pakete bereitgestellt:
Package Current Wanted Latest Location Depended by
lodash 1.0.0 1.0.0 4.17.19 lock-test main-code-file
node-fetch 1.2.0 1.2.0 2.6.0 lock-test function-code-file
Die Spalten in der Ausgabe enthalten Folgendes:
Column | BESCHREIBUNG |
---|---|
Paket | Das veraltete Paket. |
Aktuell | Die derzeit installierte Version des Pakets. |
Gewünscht | Diese aktuellste Version, die dem in der package.json -Datei angegeben semantischen Muster entspricht. |
Latest | Die aktuelle Version des Pakets. |
Standort | Der Speicherort der Paketabhängigkeit. Der Befehl outdated durchsucht alle installierten Pakete in den verschiedenen node_modules -Ordnern. |
Abhängigkeit von | Das Paket mit der Abhängigkeit. |
Umgang mit Sicherheitsproblemen bei der npm-Überwachung
Jedes Mal, wenn Sie ein Paket installieren oder aktualisieren, erhalten Sie eine Protokollantwort, die Ihnen anzeigt, welche Version installiert wurde und ob Sicherheitsrisiken bestehen. Das Protokoll listet Sicherheitsrisiken auf. Wenn Sicherheitsrisiken mit kritischem oder hohem Schweregrad bestehen, sollten Sie das Paket aktualisieren.
Hier ein Beispiel für eine Protokollantwort:
+ lodash@1.3.1
added 1 package from 4 contributors and audited 1 package in 0.949s
found 3 vulnerabilities (1 low, 2 high)
run `npm audit fix` to fix them, or `npm audit` for details
Sie können den Befehl npm audit
ausführen, um ein Problem zu beheben und ein Update anzuwenden. Dieser Befehl listet jedes Sicherheitsrisiko auf.
Der Befehl npm audit fix
versucht, Sicherheitsrisiken zu beheben, indem ein Upgrade auf eine Nebenversion ausgeführt wird, in der das Problem nicht besteht. Eine solche Nebenversion ist jedoch möglicherweise nicht verfügbar, wenn sich der Fix in der nächsten Hauptversion befindet.
In solchen Fällen müssen Sie möglicherweise npm audit fix --force
verwenden. Durch das Aktualisieren auf die Hauptversion kann es allerdings zu Breaking Changes kommen. Sie sollten die Entscheidung, diesen Befehl auszuführen, sorgfältig abwägen. Seien Sie sich der Breaking Changes bewusst, und verwenden Sie npm update
, um Ihren Code mit den Sicherheitsrisiken zu aktualisieren.
Ein Sicherheitsrisiko ist eine Schwäche im Code, die von Angreifern ausgenutzt werden kann, um böswillige Aktionen auszuführen, wodurch ihre Daten und Systeme potenziell beeinträchtigt werden können. Es ist von entscheidender Bedeutung, solche Sicherheitsrisiken umgehend zu beheben.
Da häufig Sicherheitsrisiken entdeckt werden, verfügt GitHub über eine Funktion, die Repositorys überprüft und automatisch Pull Requests (PRs) erstellt, die Upgrades auf sicherere Versionen vorschlagen. Das regelmäßige Ausführen von npm audit
ist eine bewährte Methode zum Identifizieren und Beheben von Sicherheitsrisiken, die zur allgemeinen Sicherheit Ihres Projekts beiträgt.
Empfohlener Updateworkflow
Der empfohlene Workflow für Updates ist folgender:
npm run test
: Überprüfen Sie, ob Ihre vorhandenen Tests bestanden werden, bevor Sie diesen Updatevorgang starten.npm audit
: um eine Überprüfung auf Sicherheitsrisiken in der aktuell von Ihnen verwendeten Version vorzunehmen. Die durchnpm audit
bereitgestellten Informationen umfassen möglicherweise die Empfehlung, eine Aktualisierung auf eine Hauptversion durchzuführen. Sofern Breaking Changes aufgeführt sind, sollten Sie diese sorgfältig überprüfen.npm outdated
: um alle veralteten Pakete aufzulisten. Dieser Befehl stellt Informationen in den Spalten Wanted, Current und Location bereit.- Aktualisieren Sie mit
npm update
:- Für kleinere Projekte (mit wenigen Abhängigkeiten in der
package.json
): Sie könnennpm update
versuchen, um alle Abhängigkeiten zu aktualisieren, und dann Ihre Tests ausführen. - Für größere Projekte (mit vielen Abhängigkeiten in der
package.json
): Aktualisieren Sie ein einzelnes Paket oder eine Paketfamilie (z. B. Next.js und React), und führen Sie dann die Tests aus.
- Für kleinere Projekte (mit wenigen Abhängigkeiten in der
npm audit
: Überprüfen Sie, ob kritische oder hohe Sicherheitsrisiken vorhanden sind. Wenn weiterhin Sicherheitsrisiken bestehen, verwenden Sienpm update
mit dem Paketnamen und der innpm audit
empfohlenen Hauptversion.- Wieder
npm run test
. - Überprüfen Sie in Ihrer
package.json
undpackage-lock.json
.