Zum Inhalt springen

Semver

Versionsnummern im JavaScript-Ökosystem folgen dem Standard Semantic Versioning (kurz: Semver). Das Schema lautet:

MAJOR.MINOR.PATCH
└─── Breaking Changes
└─── Neue Features (abwärtskompatibel)
└─── Bugfixes (abwärtskompatibel)

Beispiel: 19.1.3 — Major 19, Minor 1, Patch 3.

Eine neue Hauptversion (20.0.0) darf bestehende APIs brechen. Eine neue Nebenversion (19.2.0) fügt Features hinzu, ohne etwas kaputtzumachen. Ein Patch (19.1.4) behebt nur Fehler.

In der package.json stehen selten exakte Versionen — stattdessen Bereiche:

{
"dependencies": {
"react": "^19.1.0",
"lodash": "~4.17.21",
"some-tool": "3.0.0"
}
}
PrefixBedeutungErlaubt
^Kompatibel mit dieser VersionMinor- und Patch-Updates
~Ungefähr diese VersionNur Patch-Updates
(keiner)Exakt diese VersionKeine Updates

"react": "^19.1.0" heißt: installiere mindestens 19.1.0, aber nicht 20.0.0 — also alles in Major-Version 19.

Wenn du npm install in einem neuen Checkout ausführst, installiert npm die neueste Version innerhalb des angegebenen Bereichs — sofern kein Lockfile vorhanden ist. Das kann dazu führen, dass zwei Entwickler unterschiedliche Versionen haben, obwohl sie dasselbe Repository benutzen.

Deshalb existiert der Lockfile: Er fixiert die tatsächlich installierte Version, unabhängig vom Versionsbereich in package.json.

Terminal-Fenster
# Zeigt veraltete Pakete und die neueste verfügbare Version
npm outdated
# Aktualisiert Pakete innerhalb der erlaubten Bereiche aus package.json
npm update
# Installiert eine bestimmte Version explizit
npm install react@19.0.0