Tutorial

So verwenden Sie Node.js-Module mit npm und package.json

Published on May 1, 2020
Deutsch
So verwenden Sie Node.js-Module mit npm und package.json

Die Autorin wählte den Open Internet/Free Speech Fund, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

Einführung

Aufgrund von solchen Eigenschaften wie ihrer schnellen Performance bezüglich des Input/Output (I/O) und ihrer bekannten JavaScript-Syntax ist Node.js schnell zu einer beliebten Laufzeitumgebung für die Backend-Webentwicklung geworden. Doch mit wachsendem Interesse werden immer größere Anwendungen erstellt und die Verwaltung der Komplexität der Codebasis und ihrer Abhängigkeiten wird immer schwieriger. Node.js organisiert diese Komplexität mithilfe von Modulen. Das sind beliebige einzelne JavaScript-Dateien mit Funktionen oder Objekten, die von anderen Programmen oder Modulen verwendet werden können. Eine Sammlung von einem oder mehreren Modulen wird allgemein als Paket bezeichnet. Die Pakete selbst werden von Paketmanagern organisiert.

Der Node.js-Paketmanager (npm) ist der standardmäßige und beliebteste Paketmanager im Node.js.-Ökosystem und wird in erster Linie zur Installation und Verwaltung externer Module in einem Node.js-Projekt verwendet. Er wird auch häufig genutzt, um eine breite Palette von CLI-Tools zu installieren und Projektskripte auszuführen. npm verfolgt die in einem Projekt installierten Module mit der Datei package.json, die sich im Verzeichnis eines Projekts befindet und Folgendes enthält:

  • Alle für ein Projekt benötigten Module und ihre installierten Versionen
  • Alle Metadaten zu einem Projekt, wie z. B. Autor, Lizenz usw.
  • Skripts, die ausgeführt werden können, um Aufgaben im Projekt zu automatisieren

Wenn Sie komplexere Node.js-Projekte erstellen, bietet Ihnen das Verwalten Ihrer Metadaten und Abhängigkeiten mit der package.json-Datei besser vorhersehbare Builds, da alle externen Abhängigkeiten gleich gehalten werden. Die Datei verfolgt diese Informationen automatisch; während Sie die Datei direkt ändern können, um die Metadaten Ihres Projekts zu aktualisieren, müssen Sie selten direkt mit ihr interagieren, um Module zu verwalten.

In diesem Tutorial verwalten Sie Pakete mit npm. Der erste Schritt besteht darin, die package.json-Datei zu erstellen und zu verstehen. Diese verwenden Sie dann, um alle Module zu verfolgen, die Sie in Ihrem Projekt installieren. Zum Schluss listen Sie Ihre Paketabhängigkeiten auf, aktualisieren Ihre Pakete, deinstallieren Ihre Pakete und führen eine Prüfung zum Auffinden von Sicherheitsmängeln in Ihren Paketen durch.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

Schritt 1 – Erstellen einer package.json-Datei

Beginnen wir dieses Tutorial, indem wir das Beispielprojekt einrichten – ein fiktives Node.js-locator-Modul, das die IP-Adresse des Benutzers ermittelt und das Herkunftsland ausgibt. In diesem Tutorial codieren Sie das Modul nicht. Die von Ihnen verwalteten Pakete wären jedoch relevant, wenn Sie es entwickeln würden.

Zuerst erstellen Sie eine package.json-Datei, um nützliche Metadaten über das Projekt zu speichern und um Ihnen die Verwaltung der abhängigen Node.js-Module des Projekts zu erleichtern. Wie die Endung bereits andeutet, handelt es sich um eine JSON-Datei (JavaScript Object Notation). JSON ist ein Standardformat für die gemeinsame Nutzung, das auf JavaScript-Objekten basiert und aus Daten besteht, die als Schlüssel-Wert-Paare gespeichert sind. Wenn Sie mehr über JSON erfahren möchten, lesen Sie unseren Artikel Einführung zu JSON.

Da eine package.json-Datei zahlreiche Eigenschaften enthält, kann ihre manuelle Erstellung umständlich sein, ohne eine Vorlage von einer anderen Stelle zu kopieren und einzufügen. Um das zu erleichtern, bietet npm den Befehl init. Das ist ein interaktiver Befehl, der Ihnen eine Reihe von Fragen stellt und eine package.json-Datei auf der Grundlage Ihrer Antworten erstellt.

Verwenden des Befehls init

Erstellen Sie zuerst ein Projekt, mit dem Sie das Verwalten von Modulen praktizieren können. Erstellen Sie in Ihrer Shell einen neuen Ordner namens locator:

  1. mkdir locator

Gehen Sie dann in den neuen Ordner:

  1. cd locator

Initialisieren Sie nun die interaktive Eingabeaufforderung, indem Sie Folgendes eingeben:

  1. npm init

Anmerkung: Wenn Ihr Code Git zur Versionskontrolle verwendet, erstellen Sie zuerst das Git-Repository und führen Sie dann npm init aus. Der Befehl versteht automatisch, dass er in einem Git-fähigen Ordner ist. Wenn ein Git-Remote eingestellt ist, füllt es automatisch die Felder repository, bugs und homepage für Ihre package.json-Datei aus. Wenn Sie das Repo nach Erstellung der package.json-Datei initialisiert haben, müssen Sie diese Informationen selbst eingeben. Weitere Informationen zur Git-Versionskontrolle finden Sie in unserer Serie Einführung zu Git: Installation, Verwendung und Zweige.

Sie erhalten die folgende Ausgabe:

Output
This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg>` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. package name: (locator)

Zuerst werden Sie mit name zur Eingabe des Namens Ihres neuen Projekts aufgefordert. Standardmäßig nimmt der Befehl an, dass dies der Name des Ordners ist, in dem Sie sind. Standardwerte für jede Eigenschaft werden in Klammern () gezeigt. Da der Standardwert für name die Zwecke dieses Tutorials erfüllt, drücken Sie die Eingabetaste, um ihn zu akzeptieren.

Der nächste einzugebende Wert ist version. Neben name ist dieses Feld erforderlich, wenn Ihr Projekt mit anderen im npm-Paket-Repository geteilt wird.

Anmerkung: Es wird erwartet, dass Node.js-Pakete dem Leitfaden Semantic Versioning (semver) folgen, einem Leitfaden für semantische Versionierung. Die erste Ziffer ist daher die MAJOR-Versionsziffer, die sich nur ändert, wenn sich die API ändert. Die zweite Ziffer ist die MINOR-Version, die sich ändert, wenn Eigenschaften hinzugefügt werden. Die letzte Ziffer ist die PATCH-Version, die sich ändert, wenn Fehler behoben werden.

Drücken Sie die Eingabetaste, damit die Standardversion akzeptiert wird.

Das nächste Feld ist description – eine nützliche Zeichenfolge, um zu erklären, was Ihr Node.js-Modul tut. Unser fiktive locator würde die IP-Adresse des Benutzers ermitteln und das Herkunftsland ausgeben. Eine passende description wäre Findet das Ursprungsland der eingehenden Anfrage. Geben Sie etwas in dieser Art ein und drücken Sie die Eingabetaste. Die description ist sehr nützlich, wenn jemand nach Ihrem Modul sucht.

Die nächste Eingabeaufforderung fragt Sie nach dem entry point. Wenn jemand Ihr Modul installiert und mit requires anfordert, wird das, was Sie in entry point festlegen, als erster Teil Ihres Programms geladen. Der Wert muss der relative Speicherort einer JavaScript-Datei sein und wird der main-Eigenschaft des package.json hinzugefügt. Drücken Sie die Eingabetaste, um den Standardwert zu speichern.

Anmerkung: Die meisten Module haben eine index.js-Datei als Haupteingabepunkt. Das ist der Standardwert für die main-Eigenschaft des package.json, die der Eingangspunkt für npm-Module ist. Wenn kein package.json vorhanden ist, wird Node.js standardmäßig versuchen, index.js zu laden.

Als Nächstes werden Sie nach einem test command gefragt, einem ausführbaren Skript oder Befehl zur Ausführung Ihres Projekttests. In vielen beliebten Node.js-Modulen werden Tests mit Mocha, Jest, Jasmine oder anderen Test-Frameworks geschrieben und ausgeführt. Da das Testen über den Umfang dieses Artikels hinausgeht, lassen Sie diese Option jetzt leer und drücken Sie die Eingabetaste, um fortzufahren.

Der Befehl init fragt dann nach dem GitHub-Repository des Projekts. Sie werden es in diesem Beispiel nicht verwenden, also lassen Sie auch das leer.

Nach der Eingabeaufforderung des Repository fragt der Befehl nach keywords. Diese Eigenschaft ist ein Array von Zeichenfolgen mit nützlichen Begriffen, die Personen zum Finden Ihres Repositorys verwenden können. Am besten ist es, wenn Sie eine kleine Anzahl von Wörtern haben, die für Ihr Projekt wirklich relevant sind, damit die Suche gezielter erfolgen kann. Erstellen Sie eine Liste dieser Schlüsselwörter als Zeichenfolge mit Kommas, die die einzelnen Werte trennen. Geben Sie für dieses Beispielprojekt ip,geo,country bei der Eingabeaufforderung ein. Das fertige package.json verfügt nun über drei Elemente im Array für keywords.

Das nächste Feld in der Eingabeaufforderung ist author. Das ist nützlich für die Benutzer Ihres Moduls, die Kontakt mit Ihnen aufnehmen möchten. Wenn zum Beispiel jemand ein Exploit in Ihrem Modul entdeckt, kann er auf diesem Wege das Problem melden, damit Sie es beheben können. Das author-Feld ist eine Zeichenfolge im folgenden Format: "Name \<Email\> (Website)". Beispielsweise ist „Sammy \<sammy@your_domain\> (https://your_domain)" ein gültiger Autor. Die Daten zur E-Mail und Website sind optional – ein gültiger Autor kann auch nur ein Name sein. Fügen Sie Ihre Kontaktdaten als Autor hinzu und bestätigen Sie mit der Eingabetaste.

Schließlich werden Sie mit license zur Eingabe der Lizenz aufgefordert. Dadurch werden die rechtlichen Berechtigungen und Beschränkungen für Benutzer bei der Verwendung Ihres Moduls festgelegt. Viele Node.js-Module sind Open-Source-Module, sodass npm die Standardeinstellung auf ISC setzt.

Zu diesem Zeitpunkt würden Sie Ihre Lizenzoptionen überprüfen und entscheiden, was für Ihr Projekt am besten geeignet ist. Weitere Informationen zu verschiedenen Arten von Open-Source-Lizenzen finden Sie in dieser Lizenzliste aus der Open Source Initiative. Wenn Sie keine Lizenz für ein privates Repository bereitstellen möchten, können Sie bei der Eingabeaufforderung UNLICENSED eingeben. Verwenden Sie für dieses Beispiel die standardmäßige ISC-Lizenz und drücken Sie die Eingabetaste, um den Prozess abzuschließen.

Der Befehl init zeigt nun die package.json-Datei, die erstellt wird. Das wird ähnlich aussehen wie folgt:

Output
About to write to /home/sammy/locator/package.json: { "name": "locator", "version": "1.0.0", "description": "Finds the country of origin of the incoming request", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "ip", "geo", "country" ], "author": "Sammy <sammy@your_domain> (https://your_domain)", "license": "ISC" } Is this OK? (yes)

Sobald die Informationen mit dem übereinstimmen, was Sie hier sehen, drücken Sie die Eingabetaste, um den Prozess abzuschließen und die Datei package.json zu erstellen. Mit dieser Datei können Sie ein Verzeichnis der Module führen, die Sie für Ihr Projekt installieren.

Nachdem Ihre package.json-Datei nun vorhanden ist, können Sie im nächsten Schritt die Installation von Modulen testen.

Schritt 2 – Installieren von Modulen

In der Softwareentwicklung ist es üblich, externe Bibliotheken zu nutzen, um untergeordnete Aufgaben in Projekten auszuführen. Dadurch kann sich der Entwickler auf die Geschäftslogik konzentrieren und die Anwendung schneller und effizienter gestalten.

Wenn beispielsweise unser locater-Beispielmodul eine externe API-Anfrage stellen muss, um geografische Daten zu erhalten, könnten wir eine HTTP-Bibliothek verwenden, um diese Aufgabe zu erleichtern. Da unser Hauptziel darin besteht, sachbezogene geografische Daten an den Benutzer auszugeben, könnten wir ein Paket installieren, das uns HTTP-Anfragen erleichtert – anstatt diesen Code für uns selbst neu zu schreiben, was eine Aufgabe wäre, die den Rahmen unseres Projekts sprengt.

Wir führen dieses Beispiel nun durch. In Ihrer locator-Anwendung nutzen Sie die axios-Bibliothek, die Ihnen bei der Erstellung von HTTP-Anfragen hilft. Installieren Sie sie, indem Sie Folgendes in Ihre Shell eingeben:

  1. npm install axios --save

Sie beginnen diesen Befehl mit npm install, wodurch das Paket installiert wird (der Einfachheit halber können Sie npm i verwenden). Anschließend listen Sie die Pakete, die installiert werden sollen, durch ein Leerzeichen getrennt auf. In diesem Fall ist das axios. Schließlich beenden Sie den Befehl mit dem optionalen Parameter --save, der angibt, dass axios als Projektabhängigkeit gespeichert wird.

Wenn die Bibliothek installiert ist, sehen Sie eine Ausgabe, die der folgenden ähnelt:

Output
... + axios@0.19.0 added 5 packages from 8 contributors and audited 5 packages in 0.764s found 0 vulnerabilities

Öffnen Sie nun die Datei package.json mit einem Texteditor Ihrer Wahl. Dieses Tutorial verwendet nano:

  1. nano package.json

Sie sehen eine neue Eigenschaft, wie im Folgenden hervorgehoben:

locator/package.json
{
  "name": "locator",
  "version": "1.0.0",
  "description": "Finds the country of origin of the incoming request",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "ip",
    "geo",
    "country"
  ],
  "author": "Sammy sammy@your_domain (https://your_domain)",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.19.0"
  }
}

Die Option --save hat npm angewiesen, die Datei package.json mit dem Modul und der Version zu aktualisieren, die gerade installiert wurden. Das ist sehr gut, da andere Entwickler, die an Ihren Projekten arbeiten, leicht erkennen können, welche externen Abhängigkeiten benötigt werden.

Anmerkung: Vielleicht ist Ihnen das ^ vor der Versionsnummer für die axios-Abhängigkeit aufgefallen. Erinnern Sie sich daran, dass die semantische Versionierung aus drei Ziffern besteht: MAJOR, MINOR und PATCH. Das Symbol ^ bedeutet, dass jede höhere MINOR- oder PATCH-Version diese Versionseinschränkung erfüllen würde. Wenn Sie zu Beginn einer Versionsnummer ~ sehen, erfüllen nur höhere PATCH-Versionen die Einschränkung.

Wenn Sie mit der Prüfung von package.json fertig sind, beenden Sie die Datei.

Entwicklungsabhängigkeiten

Pakete, die für die Entwicklung eines Projekts verwendet werden, nicht aber für die Zusammenstellung oder die Ausführung in der Produktion, werden als Entwicklungsabhängigkeiten bezeichnet. Sie sind nicht notwendig, damit Ihr Modul oder Ihre Anwendung in der Produktion funktioniert, können aber beim Schreiben des Codes hilfreich sein.

Beispielsweise ist es üblich, dass Entwickler Code-Linter verwenden, um sicherzustellen, dass ihr Code bewährte Praktiken verfolgt und um den Stil konsistent zu halten. Das ist für die Entwicklung nützlich, erhöht aber die Menge des Verteilbaren, ohne beim Einsatz in der Produktion einen spürbaren Nutzen zu bieten.

Installieren Sie einen Linter als Entwicklungsabhängigkeit für Ihr Projekt. Probieren Sie Folgendes in Ihrer Shell aus:

  1. npm i eslint@6.0.0 --save-dev

In diesem Befehl haben Sie das Flag --save-dev verwendet. Dadurch wird eslint als Abhängigkeit gespeichert, die nur für die Entwicklung benötigt wird. Beachten Sie auch, dass Sie Ihrem Abhängigkeitsnamen @6.0.0 hinzugefügt haben. Wenn Module aktualisiert werden, werden sie mit einer Version getaggt. Das @ weist npm an, nach einem bestimmten Tag des Moduls, das Sie installieren, zu suchen. Ohne ein bestimmtes Tag installiert npm die letzte getaggte Version. Öffnen Sie package.json erneut:

  1. nano package.json

Dadurch wird Folgendes angezeigt:

locator/package.json
{
  "name": "locator",
  "version": "1.0.0",
  "description": "Finds the country of origin of the incoming request",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "ip",
    "geo",
    "country"
  ],
  "author": "Sammy sammy@your_domain (https://your_domain)",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.19.0"
  },
  "devDependencies": {
    "eslint": "^6.0.0"
  }
}

eslint wurde als eine devDependencies gespeichert, zusammen mit der zuvor von Ihnen angegebenen Versionsnummer. Beenden Sie package.json.

Automatisch generierte Dateien: node_modules und package-lock.json

Wenn Sie zum ersten Mal ein Paket in einem Node.js-Projekt installieren, erstellt npm automatisch den Ordner node_modules, um die für Ihr Projekt erforderlichen Module zu speichern, und die Datei package-lock.json, die Sie zuvor geprüft haben.

Bestätigen Sie, dass sich diese in Ihrem Arbeitsverzeichnis befinden. Geben Sie in Ihrer Shell ls ein und drücken Sie die Eingabetaste. Sie sehen folgende Ausgabe:

Output
node_modules package.json package-lock.json

Der Ordner node_modules enthält jede installierte Abhängigkeit für Ihr Projekt. In den meisten Fällen sollten Sie diesen Ordner nicht in Ihr versionskontrolliertes Repository übertragen. Wenn Sie weitere Abhängigkeiten installieren, wird die Größe dieses Ordners schnell anwachsen. Darüber hinaus werden in der Datei package-lock.json die genauen installierten Versionen in einer knapperen Form aufgezeichnet, sodass das Einfügen von node_modules nicht notwendig ist.

Während die Datei package.json Abhängigkeiten auflistet, die uns die geeigneten Versionen zeigen, die für das Projekt installiert werden sollten, verfolgt die Datei package-lock.json alle Änderungen in package.json oder node_modules und zeigt uns die genaue Version des installierten Pakets. Normalerweise übergeben Sie diese an Ihr versionskontrolliertes Repository statt an node_modules, da dies eine sauberere Darstellung all Ihrer Abhängigkeiten bietet.

Installieren aus package.json

Mit Ihren Dateien package.json und package-lock.json können Sie schnell die gleichen Projektabhängigkeiten einrichten, bevor Sie die Entwicklung eines neuen Projekts starten. Um dies zu demonstrieren, gehen Sie in Ihrem Verzeichnisbaum eine Ebene höher und erstellen Sie einen neuen Ordner namens cloned_locator auf derselben Verzeichnisebene wie locator:

  1. cd ..
  2. mkdir cloned_locator

Gehen Sie in Ihr neues Verzeichnis:

  1. cd cloned_locator

Kopieren Sie nun die Dateien package.json und package-lock.json von locator zu cloned_locator:

  1. cp ../locator/package.json ../locator/package-lock.json .

Um die erforderlichen Module für dieses Projekt zu installieren, geben Sie Folgendes ein:

  1. npm i

npm wird nach einer package-lock.json-Datei suchen, um die Module zu installieren. Wenn keine Lock-Datei verfügbar ist, würde npm aus der Datei package.json lesen, um die Installationen zu bestimmen. Normalerweise ist es schneller, aus package-lock.json zu installieren, da die Lock-Datei die genaue Version von Modulen und deren Abhängigkeiten enthält. So muss npm nicht lange nach einer geeigneten Version für die Installation suchen.

Beim Einsatz in der Produktion können Sie die Entwicklungsabhängigkeiten überspringen. Erinnern Sie sich daran, dass Entwicklungsabhängigkeiten im Abschnitt devDependencies von package.json gespeichert werden und keinen Einfluss auf die Ausführung Ihrer Anwendung haben. Wenn Sie Module als Teil des CI/CD-Prozesses zur Bereitstellung Ihrer Anwendung installieren, lassen Sie die dev-Abhängigkeiten weg, indem Sie Folgendes ausführen:

  1. npm i --production

Das Flag --production ignoriert den Abschnitt devDependencies während der Installation. Bleiben Sie vorerst bei Ihrem Entwicklungs-Build.

Bevor Sie zum nächsten Abschnitt übergehen, kehren Sie zum Ordner locator zurück:

  1. cd ../locator

Globale Installationen

Bisher haben Sie npm-Module für das locator-Projekt installiert. npm bietet Ihnen auch die Möglichkeit, Pakete global zu installieren. Das bedeutet, dass das Paket wie jeder andere Shell-Befehl für Ihren Benutzer im weiteren System verfügbar ist. Diese Fähigkeit ist für die vielen Node.js-Module nützlich, die CLI-Tools sind.

Vielleicht möchten Sie zum Beispiel über das locator-Projekt bloggen, an dem Sie gerade arbeiten. Dazu können Sie eine Bibliothek wie Hexo verwenden, um Ihren statischen Website-Blog zu erstellen und zu verwalten. Installieren Sie die Hexo-CLI wie folgt:

  1. npm i hexo-cli -g

Um ein Paket global zu installieren, hängen Sie das Flag -g an den Befehl an.

Anmerkung: Wenn Sie beim Versuch, dieses Paket global zu installieren, eine Fehlermeldung bezüglich der Berechtigung erhalten, benötigt Ihr System möglicherweise Superuser-Rechte, um den Befehl auszuführen. Versuchen Sie es erneut mit sudo npm i hexo-cli -g.

Testen Sie, ob das Paket erfolgreich installiert wurde, indem Sie Folgendes eingeben:

  1. hexo --version

Sie werden eine Ausgabe sehen, die der folgenden ähnelt:

Output
hexo-cli: 2.0.0 os: Linux 4.15.0-64-generic linux x64 http_parser: 2.7.1 node: 10.14.0 v8: 7.6.303.29-node.16 uv: 1.31.0 zlib: 1.2.11 ares: 1.15.0 modules: 72 nghttp2: 1.39.2 openssl: 1.1.1c brotli: 1.0.7 napi: 4 llhttp: 1.1.4 icu: 64.2 unicode: 12.1 cldr: 35.1 tz: 2019a

Bisher haben Sie gelernt, wie Sie Module mit npm installieren. Sie können Pakete lokal in ein Projekt installieren, entweder als Produktions- oder Entwicklungsabhängigkeit. Sie können auch Pakete installieren, die auf bereits existierenden package.json- oder package-lock.json-Dateien basieren. So können Sie mit den gleichen Abhängigkeiten entwickeln wie Ihre Peers. Außerdem können Sie das Flag -g verwenden, um Pakete global zu installieren und auf diese zuzugreifen – unabhängig davon, ob Sie sich in einem Node.js-Projekt befinden oder nicht.

Nachdem Sie nun Module installieren können, werden Sie im nächsten Abschnitt Techniken zur Verwaltung Ihrer Abhängigkeiten anwenden.

Schritt 3 — Verwalten von Modulen

Ein vollständiger Paketmanager kann viel mehr als nur Module installieren. npm verfügt über mehr als 20 Befehle bezüglich der Verwaltung von Abhängigkeiten. In diesem Schritt werden Sie folgende Aufgaben erledigen:

  • Module auflisten, die Sie installiert haben.
  • Module auf eine neuere Version aktualisieren.
  • Module deinstallieren, die Sie nicht mehr benötigen.
  • Eine Sicherheitsprüfung in Ihren Modulen ausführen, um Sicherheitsmängel zu finden und zu beheben.

Obwohl diese Beispiele in Ihrem locator-Ordner angewendet werden, können alle diese Befehle auch global ausgeführt werden, indem Sie das Flag -g am Ende anhängen – genau wie bei der globalen Installation.

Module auflisten

Wenn Sie wissen möchten, welche Module in einem Projekt installiert sind, ist es einfacher, den list- oder ls-Befehl zu verwenden, anstatt das package.json direkt zu lesen. Dazu geben Sie Folgendes ein:

  1. npm ls

Sie werden eine Ausgabe wie diese sehen:

Output
├─┬ axios@0.19.0 │ ├─┬ follow-redirects@1.5.10 │ │ └─┬ debug@3.1.0 │ │ └── ms@2.0.0 │ └── is-buffer@2.0.3 └─┬ eslint@6.0.0 ├─┬ @babel/code-frame@7.5.5 │ └─┬ @babel/highlight@7.5.0 │ ├── chalk@2.4.2 deduped │ ├── esutils@2.0.3 deduped │ └── js-tokens@4.0.0 ├─┬ ajv@6.10.2 │ ├── fast-deep-equal@2.0.1 │ ├── fast-json-stable-stringify@2.0.0 │ ├── json-schema-traverse@0.4.1 │ └─┬ uri-js@4.2.2 ...

Standardmäßig zeigt ls den gesamten Abhängigkeitenbaum – die Module, auf die Ihr Projekt angewiesen ist, und die Module, auf die Ihre Abhängigkeiten angewiesen sind. Das kann etwas unhandlich sein, wenn Sie einen Überblick auf hoher Ebene über die installierten Systeme haben wollen.

Um nur die von Ihnen installierten Module ohne deren Abhängigkeiten zu zeigen, geben Sie in Ihrer Shell Folgendes ein:

  1. npm ls --depth 0

Sie erhalten folgende Ausgabe:

Output
├── axios@0.19.0 └── eslint@6.0.0

Mit der Option --depth können Sie angeben, welche Ebene des Abhängigkeitenbaums Sie sehen möchten. Wenn diese 0, ist, sehen Sie nur Ihre Abhängigkeiten auf höchster Ebene.

Module aktualisieren

Das ist eine gute Praxis, Ihre npm-Module auf dem neuesten Stand zu halten. Es erhöht die Wahrscheinlichkeit, die neuesten Sicherheitskorrekturen für ein Modul zu erhalten. Verwenden Sie den Befehl outdated, um zu prüfen, ob Module aktualisiert werden können:

  1. npm outdated

Sie erhalten eine ähnliche Ausgabe:

Output
Package Current Wanted Latest Location eslint 6.0.0 6.7.1 6.7.1 locator

Der Befehl listet zuerst unter Package das installierte Paket und unter Current die aktuelle Version auf. Die Spalte Wanted zeigt, welche Version Ihre Versionsanforderung in package.json erfüllt. Die Spalte Latest zeigt die neueste veröffentlichte Version des Moduls.

Die Spalte Location gibt an, wo sich das Paket im Abhängigkeitenbaum befindet. Der Befehl outdated hat so wie ls das Flag --depth. Die Standardeinstellung für depth ist 0.

Scheinbar können Sie eslint auf eine neuere Version aktualisieren. Verwenden Sie den update- oder up-Befehl wie folgt:

  1. npm up eslint

Die Ausgabe des Befehls enthält die installierte Version:

Output
npm WARN locator@1.0.0 No repository field. + eslint@6.7.1 added 7 packages from 3 contributors, removed 5 packages, updated 19 packages, moved 1 package and audited 184 packages in 5.818s found 0 vulnerabilities

Wenn Sie alle Module auf einmal aktualisieren möchten, geben Sie ein:

  1. npm up

Module deinstallieren

Der npm-Befehl uninstall kann Module aus Ihren Projekten entfernen. Das bedeutet, dass das Modul nicht länger im Ordner node_modules installiert sein wird. Auch wird es in den Dateien package.json und package-lock.json nicht mehr zu sehen sein.

Die Entfernung von Abhängigkeiten aus einem Projekt ist eine normale Aktivität im Zyklus der Softwareentwicklung. Vielleicht löst eine Abhängigkeit ein Problem nicht so wie zuvor angepriesen oder es bietet keine zufriedenstellenden Entwicklungsergebnisse. In diesen Fällen kann es besser sein, die Abhängigkeit zu deinstallieren und Ihr eigenes Modul zu erstellen.

Stellen Sie sich vor, dass axios nicht das Entwicklungsergebnis bietet, das Sie sich für die Erstellung von HTTP-Anfragen vorgestellt haben. Desinstallieren Sie axios mit dem uninstall- oder un-Befehl, indem Sie Folgendes eingeben:

  1. npm un axios

Ihre Ausgabe wird der folgenden ähneln:

Output
npm WARN locator@1.0.0 No repository field. removed 5 packages and audited 176 packages in 1.488s found 0 vulnerabilities

Sie gibt nicht ausdrücklich an, dass axios entfernt wurde. Um zu überprüfen, ob es deinstalliert wurde, listen Sie erneut die Abhängigkeiten auf:

  1. npm ls --depth 0

Jetzt sehen wir, dass nur eslint installiert ist:

Output
└── eslint@6.7.1

Das zeigt, dass Sie das Paket axios erfolgreich desinstalliert haben.

Module prüfen

npm bietet einen audit-Befehl, um auf potenzielle Sicherheitsmängel in Ihren Abhängigkeiten zu verweisen. Um den Prüfbefehl audit in Aktion zu sehen, installieren Sie eine veraltete Version des Moduls request, indem Sie Folgendes ausführen:

  1. npm i request@2.60.0

Wenn Sie diese veraltete Version von request installieren, erhalten Sie eine Ausgabe, die der folgenden ähnelt:

Output
+ request@2.60.0 added 54 packages from 49 contributors and audited 243 packages in 7.26s found 6 moderate severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details

npm teilt Ihnen mit, dass Sie Schwachstellen in Ihren Abhängigkeiten haben. Um weitere Informationen zu erhalten, prüfen Sie Ihr gesamtes Projekt mit:

  1. npm audit

Der Befehl audit zeigt in der Ausgabe Tabellen, in denen Sicherheitsmängel hervorgehoben werden:

Output
=== npm audit security report === # Run npm install request@2.88.0 to resolve 1 vulnerability ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ Moderate │ Memory Exposure │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Package │ tunnel-agent │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Dependency of │ request │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Path │ request > tunnel-agent │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ More info │ https://npmjs.com/advisories/598 │ └───────────────┴──────────────────────────────────────────────────────────────┘ # Run npm update request --depth 1 to resolve 1 vulnerability ┌───────────────┬──────────────────────────────────────────────────────────────┐ │ Moderate │ Remote Memory Exposure │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Package │ request │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Dependency of │ request │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ Path │ request │ ├───────────────┼──────────────────────────────────────────────────────────────┤ │ More info │ https://npmjs.com/advisories/309 │ └───────────────┴──────────────────────────────────────────────────────────────┘ ...

Sie können den Pfad der Schwachstelle sehen und manchmal bietet npm Ihnen Möglichkeiten, sie zu beheben. Sie können wie vorgeschlagen den Befehl zur Aktualisierung oder den Unterbefehl fix des audit ausführen. Geben Sie Folgendes in Ihre Shell ein:

  1. npm audit fix

Sie sehen eine ähnliche Ausgabe:

Output
+ request@2.88.0 added 19 packages from 24 contributors, removed 32 packages and updated 12 packages in 6.223s fixed 2 of 6 vulnerabilities in 243 scanned packages 4 vulnerabilities required manual review and could not be updated

npm konnte zwei der Pakete sicher aktualisieren und Ihre Schwachstellen um die gleiche Anzahl verringern. Sie haben jedoch immer noch vier Schwachstellen in Ihren Abhängigkeiten. Der Befehl audit fix korrigiert nicht immer jedes Problem. Obwohl eine Version eines Moduls eine Sicherheitsschwachstelle aufweisen kann, könnte eine Aktualisierung auf eine Version mit einer anderen API den Code weiter oben im Abhängigkeitenbaum aufbrechen.

Sie können den Parameter --force auf folgende Weise verwenden, um sicherzustellen, dass die Schwachstellen nicht mehr vorhanden sind:

  1. npm audit fix --force

Wie bereits erwähnt, wird dies nicht empfohlen, solange Sie sich nicht sicher sind, dass die Funktionalität hiervon nicht beeinträchtigt wird.

Zusammenfassung

In diesem Tutorial haben Sie verschiedene Übungen durchlaufen, die zeigen, wie Node.js-Module in Paketen organisiert sind und wie diese Pakete von npm verwaltet werden. Sie haben in einem Node.js-Projekt npm-Pakete als Abhängigkeiten verwendet, indem Sie eine package.json-Datei erstellt und verwaltet haben. Diese Datei beinhaltet eine Aufzeichnung der Metadaten Ihres Projekts einschließlich der Module, die Sie installiert haben. Neben dem Auflisten Ihres Abhängigkeitenbaums Ihrer Projekte sowie dem Prüfen und Aktualisieren veralteter Module haben Sie das npm-CLI-Tool zum Installieren, Aktualisieren und Entfernen von Modulen verwendet.

In Zukunft können Sie Module verwenden, um vorhandenen Code einzusetzen und dadurch die Entwicklungszeit beschleunigen, da Sie die Funktionalität nicht wiederholen müssen. Sie werden zudem in der Lage sein, eigene npm-Module zu erstellen, die wiederum von anderen über npm-Befehle verwaltet werden. Experimentieren Sie als Nächstes mit dem, was Sie in diesem Tutorial gelernt haben, indem Sie einige der vielen existierenden Pakete installieren und testen. Sehen Sie sich an, was das Ökosystem bietet, um die Problemlösung zu erleichtern. Sie könnten zum Beispiel TypeScript, eine übergeordnete Programmiersprache von JavaScript, ausprobieren oder Ihre Website mit Cordova in mobile Anwendungen verwandeln. Wenn Sie mehr über Node.js lernen möchten, lesen Sie unsere anderen Node.js-Tutorials.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Default avatar

Senior Technical Editor

Editor at DigitalOcean, fiction writer and podcaster elsewhere, always searching for the next good nautical pun!


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel