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:
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:
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 AbschnittdevDependencies
der Dateipackage.json
hinzufügt.--no-save
, das das Speichern des Pakets in der Dateipackage.json
verhindert.--no-optional
, das die Installation optionaler Abhängigkeiten verhindert.--save-optional
, das das Paket zum AbschnittoptionalDependencies
der Dateipackage.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
npm update
ausführt. Dadurch werden alle Abhängigkeiten auf ihre neueste Version aktualisiert.
Man kann auch ein einzelnes zu aktualisierendes Paket angeben:
npm update <Paketname>
Pakete entfernen
Um ein Paket zu entfernen, kann man Folgendes ausführen:
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:
npm install <Paketname>@<Version>
Man kann auch die neueste Version eines Pakets installieren, indem man Folgendes ausführt:
npm install <Paketname>@latest
Aufgaben ausführen
Die Datei package.json unterstützt ein Format zur Angabe von Befehlszeilenaufgaben, die durch Ausführen von
npm run <Aufgabenname>
ausgeführt werden können.
Wenn man zum Beispiel eine package.json-Datei mit folgendem Inhalt hat:
{
"scripts": {
"start": "node index.js",
"test": "jest"
}
}
Es ist sehr üblich, diese Funktion zu verwenden, um Webpack auszuführen:
{
"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:
npm run watch
npm run dev
npm run prod