NPM 패키지 버저닝, Tilde와 Caret

출처 : Unsplash - @amyhirschi https://unsplash.com/photos/9EFF087BPXk

npm 패키지 버저닝을 사용하는 prefix로 틸드(Tilde, ~)와 캐럿(Caret, ^)가 있다. 각각의 차이를 알아보자.

먼저 버저닝은 아래와 같다. 버전 2.21.2는 아래의 이미지로 설명할 수 있다.

Wikimedia Commons

앞자리 버전을 major, 중간 버전을 minor, 마지막 버전이 patch인데 각각은 아래와 같은 특징을 지닌다.

  • patch : 버그 픽스 또는 이 정도 수준의 작업 버저닝
  • minor : 새로운 기능을 추가하는 버저닝
  • major : breaking change가 요구될만한 크리티컬한 변화를 담은 버저닝

Tilde (~)

reference : https://docs.npmjs.com/cli/v6/using-npm/semver#tilde-ranges-123-12-1

major, minor 버전을 제외한 patch 버전까지 버저닝하는 prefix이다.

예를들어, ~1.2.31.2.3을 포함하고, 1.3 미만의 최신 버전까지를 버저닝한다. 만약 버저닝하는 대상 패키지의 최신 패키지 버전이 1.3.2 이고, 마이너 버전이 1.2.x일때의 최신 버전이 1.2.11이라면, 1.2.11버전의 패키지로 업데이트하게 된다.

1
2
3
4
5
~0.0.5  : >= 0.0.5  < 0.1.0    -> 0.0.x  : 최신 버전의 patch 버저닝
~1.2.3 : >= 1.2.3 < 1.3.0 -> 1.2.x : 최신 버전의 patch 버저닝
~2.17.3 : >= 2.17.3 < 2.18.0 -> 2.17.x : 최신 버전의 patch 버저닝
~0 : >= 0.0.0 < 1.0.0 -> 0.x
~1 : >= 1.0.0 < 2.0.0 -> 1.x

Caret (^)

reference : https://docs.npmjs.com/cli/v6/using-npm/semver#caret-ranges-123-025-004

major 버전을 제외한 minor/patch 버전까지 버저닝하는 prefix이다.

^1.2.3으로 패키지 버저닝을 하면, 2.0.0 미만의 가장 최신 버전으로 버저닝한다. 대상 패키지의 최신 버전이 1.3.2라면, 본 패키지는 1.3.2로 업데이트된다.

1
2
3
4
^0.1.2 : >= 0.1.2 < 0.2.0   -> 0.1.x : 최신 버전의 patch 버저닝
^0.1 : >= 0.1.0 < 1.0.0 -> 0.x.x : 최신 버전의 minor 버저닝
^1.2.3 : >= 1.2.3 < 2.0.0 -> 0.x.x : 최신 버전의 minor 버저닝
^0 : >= 0.0.0 < 1.0.0 -> 0.x.x : 최신 버전의 minor 버저닝

major 버전이 0인 0.x.x에서는 tilde와 똑같이 동작한다.

1
^0.0.1 : == 0.0.1