npm (Node Package Manager) ist der standardmäßige Paketmanager für die Node.js-Plattform, der im Node.js-Installationspaket enthalten ist. npm verwaltet Abhängigkeiten von JavaScript- und TypeScript-Projekten: installiert Bibliotheken in node_modules, aktualisiert Paketversionen, löst Versionskonflikte. Die package.json ist die zentrale Konfigurationsdatei mit Metadaten und einer Liste von Abhängigkeiten. Die npm Registry ist die größte Paketregistrierung. Weitere Informationen finden Sie auf der npm Registry.
Wichtige Punkte
npm wurde 2010 von Isaac Schlueter als Lösung zur Verwaltung von Node.js-Abhängigkeiten entwickelt. Seit 2014 wird npm von npm, Inc. verwaltet, das 2020 von Microsoft/GitHub übernommen wurde. Das Tool besteht aus zwei Teilen: der CLI (Befehlszeile) zum Installieren und Verwalten von Paketen und der Registry — dem zentralen Repository aller veröffentlichten Module unter registry.npmjs.org.
Die npm Registry ist die größte Paketregistrierung: über 2 Millionen Pakete und mehr als 10 Milliarden Downloads monatlich. Jedes Paket hat eine SemVer-Version, Beschreibung, Abhängigkeiten, Lizenz und Autorenschaft. Die Veröffentlichung eines eigenen Pakets erfolgt über npm publish. npm unterstützt bereichsbezogene Pakete für Organisationen (@scope/package), private Registrierungen und eine integrierte Sicherheitsüberprüfung.
Node.js Version 18+ enthält npm 9+ mit verbesserter Leistung, Workspaces für Monorepos und einem überarbeiteten Mechanismus für Peer-Abhängigkeiten. Das npm-Ökosystem umfasst serverseitiges JavaScript, Frontend (React, Vue, Angular), mobile Entwicklung (React Native), Build-Tools (Webpack, Vite) und CLI-Dienstprogramme. npm ist der primäre Verteilungskanal für JavaScript-Bibliotheken.
npm install — der Hauptbefehl, der package.json und package-lock.json liest, um alle Abhängigkeiten in node_modules zu installieren. Beim ersten Durchlauf berechnet npm den Abhängigkeitsgraphen, löst Versionskonflikte und generiert package-lock.json. Der Befehl npm install <package> installiert ein bestimmtes Paket; das Flag --save-dev fügt es zu devDependencies hinzu, --global installiert global.
npx — ein Paketausführer, der seit Version 5.2 in npm enthalten ist. npx ermöglicht die Ausführung von CLI-Dienstprogrammen ohne globale Installation: npx react-native init oder npx create-react-app my-app. npx lädt das Paket in einen temporären Cache herunter, führt es aus und räumt nach Abschluss auf. npx ist auch nützlich, um bestimmte Tool-Versionen auszuführen.
npm audit durchsucht den Abhängigkeitsbaum nach bekannten Schwachstellen aus der npm-Datenbank. Der Befehl gibt einen Bericht mit Schweregraden (critical, high, moderate) aus und empfiehlt npm audit fix, um anfällige Pakete automatisch zu aktualisieren. npm cache speichert heruntergeladene Pakete lokal. npm cache clean --force leert den Cache bei Installationsproblemen. npm outdated zeigt veraltete Pakete an.
# Grundlegende npm-Befehle
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Ausführung ohne globale Installation
$ npx react-native init MyApp
# Sicherheitsüberprüfung
$ npm audit --fix
package.json ist eine JSON-Datei im Projektstammverzeichnis, die dessen Metadaten, Abhängigkeiten und Konfiguration beschreibt. Pflichtfelder: name (eindeutiger Paketname) und version (SemVer-Version, z. B. 1.0.0). Die Datei wird mit npm init -y zur schnellen Initialisierung oder manuell erstellt.
Semantic Versioning (SemVer) ist ein Versionierungsstandard im Format MAJOR.MINOR.PATCH. Die Hauptversion ändert sich bei inkompatiblen API-Änderungen, die Nebenversion bei Hinzufügen von Funktionalität (abwärtskompatibel), der Patch bei Fehlerbehebungen. Das ^-Symbol vor einer Version erlaubt Neben- und Patch-Updates, ~ erlaubt nur Patch-Updates.
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| Feld | Zweck | Beispielwert |
|---|---|---|
| scripts | Ausführungsbefehle für npm run | "start": "node index.js" |
| dependencies | Produktionsabhängigkeiten der Anwendung | "react": "^18.3.0" |
| devDependencies | Entwicklungs- und Testwerkzeuge | "jest": "^29.7.0" |
| peerDependencies | Host-Abhängigkeiten für Bibliotheken | "react": ">=17.0.0" |
| engines | Node.js-Versionsanforderungen | {"node": ">=18.0.0"} |
React Native-Projekte nutzen npm aktiv zur Abhängigkeitsverwaltung. Der Standardsatz umfasst react, react-native, Navigationsbibliotheken (React Navigation), HTTP-Bibliotheken (axios), Zustandsverwaltung (Redux, Zustand) und UI-Komponenten. npm ermöglicht die Installation Tausender kompatibler Pakete aus der Registrierung.
npx pod-install — ein erforderlicher Befehl nach der Installation nativer Module in React Native für iOS. npm generiert automatisch eine Podfile.lock basierend auf package-lock.json. In Expo-Projekten wird expo install anstelle von npm install verwendet, da es Versionen auswählt, die mit der aktuellen Expo SDK-Version kompatibel sind.
Versionskonflikte sind ein häufiges Problem in React Native: react-native-reanimated, react-native-gesture-handler und react-native-safe-area-context erfordern abgestimmte Versionen. Die Lösung besteht darin, alle Pakete auf die neuesten kompatiblen Versionen zu aktualisieren oder --legacy-peer-deps zu verwenden. package-lock.json ist für native Module, die über CocoaPods und Gradle kompiliert werden, von entscheidender Bedeutung.
npm ist der standardmäßige Paketmanager, der in Node.js enthalten ist. Die wichtigsten Alternativen: yarn (2016 von Facebook entwickelt) und pnpm (schnell, mit harten Links). Seit npm 5 ist der Unterschied in Geschwindigkeit und Funktionalität zwischen npm und yarn minimal. npm 7+ hat Workspaces hinzugefügt, was es für Monorepos wettbewerbsfähig macht.
| Merkmal | npm | yarn | pnpm |
|---|---|---|---|
| Entstehungsjahr | 2010 | 2016 | 2017 |
| Sperrdatei | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Installation | Sequentiell (npm 5+) | Parallel | Parallel |
| Speicherplatz | Standard | Standard | Minimal (Links) |
| Workspaces | Ja (npm 7+) | Ja | Ja |
| Plug'n'Play | Nein | Ja | Nein |
Laut State of JS 2025: 62% der Entwickler verwenden npm, 35% yarn (hauptsächlich ältere Projekte und PnP-Enthusiasten) und 3% pnpm. Für React Native-Projekte sind beide Tools gleichermaßen geeignet, aber npm ist häufiger in Projekten mit Expo SDK 50+ und neuen React Native-Initialisierungen.
yarn behält seinen Vorteil in extrem großen Monorepos (100+ Pakete) dank seiner ausgereifteren Workspace-Implementierung und Plug'n'Play. pnpm punktet bei der Speicherplatzersparnis durch harte Links auf einen globalen Speicher. Die Wahl des Managers hängt von den Teampräferenzen und der Infrastruktur ab.
Häufig gestellte Fragen
npm install aktualisiert package-lock.json und kann innerhalb des semantischen Bereichs neue Nebenversionen installieren. npm ci (Clean Install) entfernt node_modules und installiert Pakete strikt nach package-lock.json, ohne es zu aktualisieren. npm ci ist schneller, wird in CI/CD verwendet und garantiert eine identische Umgebung auf allen Maschinen. Wenn package-lock.json fehlt, gibt npm ci einen Fehler aus.
Seit npm 7 verursachen Peer-Abhängigkeitskonflikte Build-Fehler. Lösungen: Aktualisieren Sie alle Pakete auf kompatible Versionen über npm update, verwenden Sie das Flag --legacy-peer-deps für den npm 6-Modus, oder fügen Sie einen overrides-Abschnitt in package.json hinzu, um eine bestimmte Paketversion zu erzwingen. Die beste Option ist, die Abhängigkeiten auf kompatible Versionen zu aktualisieren.
npm audit durchsucht den Abhängigkeitsbaum nach bekannten Schwachstellen aus der npm Security Advisory-Datenbank. Der Befehl gibt einen Bericht mit Schweregrad (critical, high, moderate, low) aus und empfiehlt npm audit fix, um anfällige Pakete automatisch auf sichere Versionen zu aktualisieren. Die regelmäßige Ausführung von npm audit ist eine grundlegende Sicherheitspraxis für JavaScript-Projekte.
npm Workspaces ermöglichen die Verwaltung mehrerer Pakete in einem einzigen Repository. Fügen Sie das Feld "workspaces": ["packages/*"] zur Stamm-package.json hinzu. Vorteile: Einmalige Installation aller Abhängigkeiten in ein gemeinsames node_modules, automatische Symlinks zwischen lokalen Paketen, Ausführung von Skripten für alle Pakete vom Stammverzeichnis aus und Beseitigung von Versionsduplikaten.
package-lock.json sperrt die exakten Versionen aller Abhängigkeiten und ihrer transitiven Pakete. Ohne diese Datei können verschiedene Entwickler und CI-Server unterschiedliche Bibliotheksversionen innerhalb des semantischen Bereichs erhalten, was zu „funktioniert auf meinem Rechner"-Fehlern führt. Das Committen der Sperrdatei garantiert reproduzierbare Builds und identisches Verhalten in allen Umgebungen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch