Skip to content

Eine Einführung in den npm-Paketmanager

Einführung in npm

npm ist der Standard-Paketmanager für Node.js.

Im September 2022 wurden über 2,1 Millionen Pakete im npm-Register gelistet, was es zum größten Code-Repository für eine einzelne Sprache auf der Erde macht, und Sie können sicher sein, dass es ein Paket für (fast!) alles gibt.

Es begann als eine Möglichkeit, Abhängigkeiten von Node.js-Paketen herunterzuladen und zu verwalten, hat sich aber seither zu einem Tool entwickelt, das auch im Frontend-JavaScript verwendet wird.

TIP

Yarn und pnpm sind Alternativen zur npm-CLI. Sie können sich diese ebenfalls ansehen.

Pakete

Alle Abhängigkeiten installieren

Sie können alle Abhängigkeiten installieren, die in Ihrer package.json-Datei aufgeführt sind, indem Sie Folgendes ausführen:

bash
npm install

Es installiert alles, was das Projekt benötigt, im Ordner node_modules und erstellt ihn, falls er noch nicht vorhanden ist.

Ein einzelnes Paket installieren

Sie können ein einzelnes Paket installieren, indem Sie Folgendes ausführen:

bash
npm install <Paketname>

Darüber hinaus fügt dieser Befehl seit npm 5 <Paketname> den Abhängigkeiten der Datei package.json hinzu. Vor Version 5 mussten Sie das Flag --save hinzufügen.

Oft werden diesem Befehl weitere Flags hinzugefügt:

  • --save-dev (oder -D), das das Paket zum Abschnitt devDependencies der Datei package.json hinzufügt.
  • --no-save, das das Speichern des Pakets in der Datei package.json verhindert.
  • --no-optional, das die Installation optionaler Abhängigkeiten verhindert.
  • --save-optional, das das Paket zum Abschnitt optionalDependencies der Datei package.json hinzufügt.

Es können auch Kurzformen der Flags verwendet werden:

  • -S: --save
  • -D: --save-dev
  • -O: --save-optional

Der Unterschied zwischen devDependencies und dependencies besteht darin, dass erstere Entwicklungstools wie eine Testbibliothek enthalten, während letztere in der Produktion mit der App gebündelt werden.

Was die optionalDependencies betrifft, so ist der Unterschied, dass ein Build-Fehler der Abhängigkeit nicht zum Fehlschlagen der Installation führt. Es liegt jedoch in der Verantwortung Ihres Programms, mit dem Fehlen der Abhängigkeit umzugehen. Lesen Sie mehr über optionale Abhängigkeiten.

Pakete aktualisieren

Das Aktualisieren ist ebenfalls einfach, indem man

bash
npm update

ausführt. Dadurch werden alle Abhängigkeiten auf ihre neueste Version aktualisiert.

Man kann auch ein einzelnes zu aktualisierendes Paket angeben:

bash
npm update <Paketname>

Pakete entfernen

Um ein Paket zu entfernen, kann man Folgendes ausführen:

bash
npm uninstall <Paketname>

Versionierung

Zusätzlich zu einfachen Downloads verwaltet npm auch die Versionierung, sodass man eine bestimmte Version eines Pakets angeben oder eine Version anfordern kann, die höher oder niedriger ist als die benötigte.

Oftmals ist eine Bibliothek nur mit einer Hauptversion einer anderen Bibliothek kompatibel.

Oder ein Fehler in der neuesten Version einer Bibliothek, der noch nicht behoben ist, verursacht ein Problem.

Die Angabe einer expliziten Version einer Bibliothek hilft auch dabei, alle auf der exakt gleichen Version eines Pakets zu halten, sodass das gesamte Team dieselbe Version verwendet, bis die Datei package.json aktualisiert wird.

In all diesen Fällen hilft die Versionierung sehr, und npm folgt dem Standard der semantischen Versionierung (semver).

Man kann eine bestimmte Version eines Pakets installieren, indem man Folgendes ausführt:

bash
npm install <Paketname>@<Version>

Man kann auch die neueste Version eines Pakets installieren, indem man Folgendes ausführt:

bash
npm install <Paketname>@latest

Aufgaben ausführen

Die Datei package.json unterstützt ein Format zur Angabe von Befehlszeilenaufgaben, die durch Ausführen von

bash
npm run <Aufgabenname>

ausgeführt werden können.

Wenn man zum Beispiel eine package.json-Datei mit folgendem Inhalt hat:

json
{
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}

Es ist sehr üblich, diese Funktion zu verwenden, um Webpack auszuführen:

json
{
  "scripts": {
    "watch": "webpack --watch --progress --colors --config webpack.conf.js",
    "dev": "webpack --progress --colors --config webpack.conf.js",
    "prod": "NODE_ENV=production webpack -p --config webpack.conf.js"
  }
}

Anstatt diese langen Befehle einzugeben, die man leicht vergisst oder falsch tippt, kann man also Folgendes ausführen:

bash
npm run watch
npm run dev
npm run prod