npm und package.json verstehen
npm ist das Herzstück jedes Node.js-Projekts. Lerne, was die package.json bedeutet, wie Versionierung funktioniert und welche Befehle du täglich brauchst.
Sobald du mit Node.js arbeitest, begegnet dir npm auf Schritt und Tritt. npm steht für "Node Package Manager" und ist das Werkzeug, mit dem du Bibliotheken installierst, dein Projekt beschreibst und Skripte ausführst. Im Zentrum steht dabei eine einzige Datei: die package.json. In diesem Beitrag schauen wir uns beides genauer an.
Ein neues Projekt anlegen
Jedes Node.js-Projekt beginnt mit einer package.json. Du erzeugst sie mit einem einzigen Befehl im Projektordner:
# Interaktiv: stellt dir ein paar Fragen
npm init
# Schneller: nimmt überall die Standardwerte
npm init -yDanach liegt eine package.json in deinem Ordner, die dein Projekt beschreibt. Sie ist sozusagen der Personalausweis deiner Anwendung.
Der Aufbau der package.json
Schauen wir uns eine typische package.json an. Sie ist eine ganz normale JSON-Datei mit klar definierten Feldern.
{
"name": "mein-projekt",
"version": "1.0.0",
"description": "Ein Beispielprojekt",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Keine Tests\" && exit 1"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}Die wichtigsten Felder sind name und version zur Identifikation, scripts für eigene Befehle sowie dependencies und devDependencies für deine Abhängigkeiten.
Pakete installieren
Mit npm install holst du dir fremde Pakete ins Projekt. npm trägt sie automatisch in die package.json ein und legt sie im Ordner node_modules ab.
# Ein Paket als normale Abhängigkeit installieren
npm install express
# Ein Werkzeug nur für die Entwicklung
npm install --save-dev nodemon
# Ein Paket global auf dem System
npm install -g typescriptDer Unterschied: dependencies braucht deine App auch in der Produktion, devDependencies brauchst du nur beim Entwickeln und Testen.
Semantische Versionierung verstehen
Die Versionsnummern wie 4.18.2 folgen dem Schema Major.Minor.Patch. Eine Erhöhung der Patch-Zahl bedeutet Fehlerkorrekturen, Minor neue Funktionen ohne Bruch und Major potenziell inkompatible Änderungen. Die Zeichen vor der Nummer steuern, welche Updates npm erlauben darf:
^4.18.2erlaubt alle Updates bis vor die nächste Major-Version, also bis4.x.x~4.18.2erlaubt nur Patch-Updates innerhalb von4.18.x4.18.2ohne Zeichen pinnt exakt diese Version fest
Die Datei package-lock.json hält fest, welche exakten Versionen tatsächlich installiert wurden, damit dein Team überall identische Stände hat. Sie gehört unbedingt ins Repository.
Skripte ausführen
Im Abschnitt scripts definierst du eigene Kommandos, die du dann bequem über npm startest. Das spart dir lange Befehlszeilen.
{
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"build": "tsc",
"lint": "eslint ."
}
}Aufgerufen werden diese Skripte so:
# start und test sind Spezialfälle ohne run
npm start
npm test
# Alle anderen Skripte brauchen run
npm run dev
npm run build
npm run lintPakete aktualisieren und prüfen
npm hilft dir auch dabei, deine Abhängigkeiten aktuell und sicher zu halten. Diese Befehle gehören in jeden Workflow:
# Veraltete Pakete anzeigen
npm outdated
# Pakete im erlaubten Rahmen aktualisieren
npm update
# Sicherheitslücken prüfen
npm audit
# Lücken automatisch beheben
npm audit fixGerade npm audit ist Gold wert, weil es dich auf bekannte Schwachstellen in deinen Abhängigkeiten hinweist.
Fazit
npm und die package.json bilden das Fundament jedes Node.js-Projekts. Du legst Projekte mit npm init an, installierst Pakete mit npm install und unterscheidest dabei zwischen Produktions- und Entwicklungsabhängigkeiten. Die semantische Versionierung mit den Zeichen ^ und ~ steuert Updates, und die package-lock.json sorgt für reproduzierbare Installationen. Mit eigenen Skripten und regelmäßigen Audits hast du dein Projekt sauber im Griff.