Wenn du mit JavaScript, insbesondere mit Vue.js, arbeitest, hast du sicher schon einmal von der package.json
gehört – aber was ist mit der package-lock.json
? Diese Datei wird oft übersehen, obwohl sie eine entscheidende Rolle für stabile Builds und reproduzierbare Entwicklungsumgebungen spielt.
In diesem Tutorial erkläre ich dir Schritt für Schritt, was die package-lock.json
ist, warum sie wichtig ist – und warum du sie immer in dein Git-Repository einchecken solltest.
🧩 1. Zweck der package-lock.json
Die package-lock.json
ist eine automatisch generierte Datei, die von npm erstellt wird, sobald du Pakete installierst. Sie speichert die exakte Version aller Abhängigkeiten, inklusive aller Unterabhängigkeiten.
➕ Warum braucht man das?
In deiner package.json
stehen oft Versionsangaben wie "^3.2.1"
– das ist ein sogenannter Versionsbereich. Das bedeutet: „Installiere Version 3.2.1 oder eine kompatiblere, aber nicht älter.“
Aber was passiert, wenn du auf einem anderen Rechner oder einem CI-System installierst? npm muss nun die passende Version finden, was unter Umständen zu unterschiedlichen Ergebnissen führen kann. Die package-lock.json
sorgt dafür, dass immer dieselbe Version installiert wird – unabhängig von der Umgebung.
⚡ Vorteile der package-lock.json
Vorteil | Erklärung |
---|---|
Exakte Versionierung | Speichert die genauen Versionen aller Pakete und Unterabhängigkeiten |
Schnellere Installation | npm kann direkt die benötigten Pakete herunterladen |
Reproduzierbare Builds | Gleiche Umgebung auf allen Rechnern – keine Überraschungen durch Updates |
📦 2. Sollte man die package-lock.json
in Git einchecken?
✅ Ja, absolut!
Die package-lock.json
sollte immer in dein Git-Repository eingecheckt werden. Hier sind einige Gründe:
🔍 Warum das wichtig ist:
- Alle Entwickler*innen erhalten dieselben Abhängigkeiten.
- CI/CD-Systeme (z. B. GitHub Actions, Jenkins) bauen reproduzierbar.
- Automatische Updates von Unterabhängigkeiten verhindern unerwartete Fehler.
⚠️ Ausnahmen:
Wenn du ein npm-Paket schreibst, das als Bibliothek veröffentlicht wird, kann es sinnvoll sein, die package-lock.json
nicht einzuchecken. In diesem Fall interessiert nur die package.json
, da andere Projekte die Abhängigkeiten selbst auflösen.
🧪 3. Praktisches Beispiel in Vue.js
Stell dir vor, du arbeitest an einem Vue 3-Projekt und installierst vue-router
:
npm install vue-router@4
In deiner package.json
steht dann:
"dependencies": {
"vue-router": "^4.3.2"
}
Aber npm speichert in der package-lock.json
die exakte Version, inklusive aller Unterabhängigkeiten:
{
"name": "vue-router",
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz",
"integrity": "sha512-...",
"dependencies": {
"vue": "^3.4.0"
}
}
So ist sichergestellt, dass jeder, der das Projekt clont, exakt dieselbe Version von vue-router
(und allen Unterabhängigkeiten) installiert.
🧠 Fazit
Die package-lock.json
ist ein wichtiges Werkzeug für stabile und reproduzierbare Builds. Sie sorgt dafür, dass alle Entwickler*innen, CI/CD-Systeme und Build-Servers dieselben Pakete verwenden.
✅ Merke:
Immer in Git einchecken – außer bei Bibliotheksprojekten.