Back

Wichtige npm-Befehle, die jeder Entwickler kennen sollte

Wichtige npm-Befehle, die jeder Entwickler kennen sollte

Sie verwenden wahrscheinlich täglich npm install und npm run dev, ohne zweimal darüber nachzudenken. Aber die npm-CLI bietet ein viel umfangreicheres Toolkit, das Ihnen echte Zeit sparen kann – egal, ob Sie einen defekten Dependency-Tree debuggen, nach Sicherheitslücken suchen oder ein einmaliges Skript ausführen. Dieser Leitfaden behandelt die wichtigsten npm-Befehle und modernen Workflow-Muster, die zur täglichen Praxis jedes Entwicklers gehören sollten.

Wichtigste Erkenntnisse

  • npm install, npm uninstall und npm outdated bilden den Kern der alltäglichen Dependency-Verwaltung.
  • Verwenden Sie npm ls, npm explain und npm query, um Ihren Dependency-Tree zu inspizieren und zu debuggen.
  • npm audit, npm sbom und npm diff bieten Ihnen praktische Werkzeuge für Sicherheit und Supply-Chain-Transparenz.
  • Das overrides-Feld in package.json ermöglicht es Ihnen, transitive Dependencies zu fixieren, ohne auf Upstream-Fixes zu warten.
  • Das Durchreichen von Flags durch Skripte mit -- und das Ausführen einmaliger Binaries mit npm exec optimieren gängige Workflows.

Installation und Verwaltung von Dependencies

Das Arbeitspferd der npm-Dependency-Verwaltung ist npm install. Führen Sie es ohne Argumente aus, um Ihr lokales node_modules mit package-lock.json zu synchronisieren. Fügen Sie einen Paketnamen hinzu, um etwas Neues zu installieren:

npm install react            # runtime dependency
npm install vite --save-dev  # dev-only dependency

Um ein Paket sicher zu entfernen und gleichzeitig package.json aufzuräumen:

npm uninstall lodash

Um zu prüfen, was in Ihrem Projekt veraltet ist:

npm outdated

Dies liefert Ihnen eine übersichtliche Tabelle mit aktuellen, gewünschten und neuesten Versionen – nützlich, bevor Sie entscheiden, was Sie wann aktualisieren möchten.

Ausführen von Skripten und Durchreichen von Flags

npm run ohne Argumente listet jedes in Ihrer package.json definierte Skript auf. Praktisch, wenn Sie in ein unbekanntes Projekt einsteigen.

Wenn Sie Flags an das zugrunde liegende Skript durchreichen müssen, verwenden Sie --, um sie zu trennen:

npm run build -- --watch --mode=development

Alles nach -- wird direkt an das Skript weitergeleitet, sodass Sie das Verhalten anpassen können, ohne package.json zu ändern.

Inspektion des Dependency-Trees

Zwei Befehle, die Entwickler zum Debuggen von Dependency-Problemen kennen sollten, sind npm ls und npm explain (auch als npm why aliasiert).

npm ls rendert Ihren vollständigen Dependency-Tree. Übergeben Sie einen Paketnamen zum Filtern:

npm ls ms

npm explain zeigt Ihnen, warum ein bestimmtes Paket installiert ist – welche direkte Dependency es eingebunden hat:

npm explain ms@0.7.1

Für erweiterte Filterung ermöglicht npm query die Suche nach Dependencies mithilfe einer CSS-Selektor-ähnlichen DSL. Zum Beispiel das Finden aller Pakete, die ein postinstall-Skript definieren (eine nützliche Sicherheitsprüfung):

npm query ":attr(scripts, [postinstall])"

Ausführen von Paketen ohne Installation

npm exec führt eine Paket-Binary unter Verwendung der lokalen Dependencies Ihres Projekts aus oder lädt das Paket temporär herunter, falls es noch nicht installiert ist. In modernen npm-Versionen delegiert der npx-Befehl unter der Haube an npm exec.

npm exec -- create-react-app my-app

Es respektiert zuerst das lokale node_modules Ihres Projekts, was das Verhalten vorhersehbarer macht als eine globale Installation.

Sicherheitsorientierte npm-Befehle

npm audit scannt Ihren Dependency-Tree gegen bekannte Schwachstellen-Datenbanken und gibt einen nach Schweregrad geordneten Bericht aus:

npm audit
npm audit fix          # automatische Behebung sicherer Updates
npm audit fix --force  # Breaking-Fixes anwenden (danach gründlich testen)

Für Supply-Chain-Transparenz generiert npm sbom eine Software Bill of Materials – ein vollständiges Inventar der Dependencies Ihres Projekts in einem maschinenlesbaren Format:

npm sbom > sbom.json

Diese Ausgabe kann direkt in Sicherheitstools wie Snyk für tiefergehende Schwachstellen-Scans eingespeist werden.

Um zu vergleichen, was sich tatsächlich zwischen zwei Paketversionen vor einem Upgrade geändert hat:

npm diff --diff=ms@2.1.2 --diff=ms@2.1.3

Die Ausgabe ähnelt git diff, was es einfach macht, unerwartete Änderungen zu erkennen, bevor sie in Ihr Projekt gelangen.

Fixieren transitiver Dependencies

Wenn eine Sicherheitslücke in einer transitiven Dependency existiert, die Sie nicht direkt kontrollieren, verwenden Sie das overrides-Feld in package.json, um eine bestimmte Version zu erzwingen:

"overrides": {
  "node-ipc": "9.2.1"
}

Beachten Sie, dass overrides ab npm v8.3 unterstützt wird. Wenn Sie Yarn verwenden, ist die entsprechende Funktion resolutions. Dieser Ansatz ist eine der praktischsten Möglichkeiten, einen sicheren Dependency-Tree aufrechtzuerhalten, ohne auf Upstream-Maintainer zu warten.

Fazit

Die meisten Entwickler kratzen nur an der Oberfläche dessen, was npm leisten kann. Die hier behandelten Befehle – von npm explain und npm query bis hin zu npm sbom und overrides – schließen die Lücke zwischen grundlegender Nutzung und einem wirklich effizienten Workflow. Beginnen Sie mit denen, die zu Ihren aktuellen Problemstellen passen, und bauen Sie darauf auf.

Häufig gestellte Fragen (FAQs)

npm exec ist der integrierte Befehl, der in npm v7 eingeführt wurde und Paket-Binaries ausführt. In modernen npm-Versionen delegiert npx unter der Haube an diesen Befehl. Der Hauptunterschied besteht darin, dass npm exec zuerst Ihr lokales node_modules prüft, was Ihnen vorhersehbareres Verhalten bietet. Für die meisten alltäglichen Aufgaben sind die beiden austauschbar, aber npm exec ist der empfohlene Ansatz für die Zukunft.

Führen Sie npm audit fix aus, um automatisch sichere, semver-kompatible Updates anzuwenden. Wenn ein Fix einen Major-Versions-Sprung erfordert, verwenden Sie npm audit fix --force, testen Sie Ihre Anwendung danach jedoch gründlich, da Breaking Changes eingeführt werden können. Bei Problemen mit transitiven Dependencies außerhalb Ihrer direkten Kontrolle verwenden Sie das overrides-Feld in package.json, um eine gepatchte Version zu fixieren.

Verwenden Sie overrides, wenn eine Schwachstelle oder ein Bug in einer transitiven Dependency existiert und die direkte Dependency, die sie einbindet, noch keinen Fix veröffentlicht hat. Es zwingt npm, eine bestimmte Version dieses verschachtelten Pakets aufzulösen. Diese Funktion erfordert npm v8.3 oder höher. Testen Sie immer nach dem Anwenden eines Overrides, da das Erzwingen einer Version zu Kompatibilitätsproblemen führen kann.

Führen Sie npm explain gefolgt vom Paketnamen und der Version aus, zum Beispiel npm explain ms@0.7.1. Dies gibt die vollständige Kette von Dependencies aus, die zur Installation des Pakets geführt haben. Sie können auch die Kurzform npm why verwenden. Für eine breitere Ansicht Ihres gesamten Dependency-Trees verwenden Sie npm ls mit einem optionalen Paketnamen-Filter.

Gain control over your UX

See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay