postimage

package.json jest plikiem, który opisuje każdy projekt oparty o Node.js. Jedną z jego najważniejszych ról jest przechowywanie informacji o zależnościach projektu. Wersję zależności można wskazać na kilka sposobów używając do tego operatorów - ten wpis przybliża ich znaczenie. Większość operatorów jest przydatna, jeżeli zależna paczka stosuje semantyczne wersjonowanie (major.minor.patch).

Operatory >=, >, =, <, <=, ||

  • >=1.6.7 oznacza wersje od 1.6.7 w górę,
  • >=1.6.7 <2.0.0 wersje od 1.6.7 do 2.0.0, bez 2.0.0,
  • <=2.0.0 wersje do 2.0.0, włącznie z 2.0.0,
  • 1.1.1 || >=1.1.3 <2.0.0 1.1.1, większa od 1.1.3 do 2.0.0, gdy 1.1.2 powodowała problemy i chcemy ją pominąć.

Operator -

  • 1.6.7 - 2.0.0, to samo co >=1.6.7 <=2.0.0 (czyli, od X do Y włącznie),
  • 1 - 2.0.0, to samo co >=1.0.0 <=2.0.0 (pierwsza wersja zakresu uzupełniana jest zerami),
  • 1 - 2, to samo co >=1.0.0 <3.0.0 (druga wersja w zakresie, wszystko poza wersją “major” może ulec zmianie).

Operator * lub x

  • 1.*, to samo co >=1.0.0 <2.0.0,
  • 1.2.x, to samo co >=1.2.0 <1.3.0.

Operator ~

Umożliwia zmianę wersji “patch”, gdy ustawiona jest na wersji “minor” lub zmianę wersji “major”, gdy ustawiona na “major”

  • ~1.6.7 oznacza to samo co >=1.6.7 <1.7.0,
  • ~1.6 jest tym samym co >=1.6.7 <1.7.0, to samo co 1.6.* (pozwala na zmianę wersji “patch”),
  • ~1 jest tożsame z >=1.0.0 <2.0.0, oraz 1.* (pozwala na zmianę wersji “minor”),
  • ~1.2.3-beta.10, to samo co >=1.2.3-beta.10 <2.0.0, ale np: 1.2.3-beta.11 wpadnie do zakresu, natomiast 1.2.4-beta.1 już nie.

Operator ^

Umożliwia zmianę tylko pierwszej niezerowej wersji. Zmiana pierwszej niezerowej wersji często uznawana jest za “breaking-change”, ^ nas przed tym chroni.

  • ^1.2.3 jest tym samym co >=1.2.3 <2.0.0 oraz 1.*,
  • ^0.2.3 oznacza to samo co >=0.2.3 <0.3.0, i to samo co 0.*,
  • ^0.0.3, to samo co >=0.0.3 <0.0.4, oraz to samo co 0.0.*.
💡 "Czy wiesz, że?" to wewnątrzfirmowa inicjatywa, której celem jest szerzenie ciekawostek z różnych obszarów IT. Najlepsze z nich trafiają na bloga dla szerszego grona odbiorców.