의존성 버전 표기

서해빈·2021년 4월 6일
0

Javascript

목록 보기
4/11

npm은 semver라는 Versioning 규칙을 따른다. 따라서 package.json에서 의존성 패키지의 버전을 기입할 때나 새로운 버전의 패키지를 출시할 때의 버전은 semver 규칙을 따라야 한다. semver는 패키지의 버전으로 하위 호환성을 보장하는 지를 알려주기 때문에 패키지 의존성 관리에 도움을 준다.

Semantic Versioning

기본규약

Semantic Versioning은 MAJOR, MINOR, PATCH 버전으로 이루어져 있고 버전 표기는 MAJOR.MINOR.PATCH와 같이 작성한다. 각 버전에 대한 설명은 아래와 같다.

  • MAJOR 버전 : 하위 호환성을 보장하지 않는 API 변경이 발생하면 MAJOR 버전을 변경한다.
  • MINOR 버전 : 하위 호환성을 보장하는 API 및 기능이 추가되면 MINOR 버전을 변경한다.
  • PATCH 버전 : 하위 호환성을 보장하면서 버그가 수정된 것이면 PATCH 버전을 변경한다.

추가 레이블

공통적으로 'dot separated identifiers[0-9A-Za-z-]'를 사용한다.

  • pre-release version : '-'로 연결
    ex. 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92

  • build metadata 표기 : '+'로 연결
    ex. 1.0.0-alpha+001, 1.0.0+20130313144700

우선순위 계산

  1. X, Y, Z 차례로 각각 비교
  2. X.Y.Z가 같을 경우 pre-release 버전이 표기된 것이 우선순위가 낮다
  3. X.Y.Z가 같은 pre-release 버전 간의 비교
    3-1. 숫자로만 구성된 경우 수의 크기로 비교
    3-2. 알파벳이나 hyphen이 포함된 경우 아스키 문자열 정렬
    3-3. 3-1은 항상 3-2보다 낮은 우선순위
    3-4. 앞 부분이 모두 같으면 필드 수가 더 많은 쪽이 높은 우선순위
    ex. 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0

Tilde (~) 범위

MINOR 버전이 명시된 경우 PATCH 변경만 허용하고, MINOR 버전이 명시되지 않으면 MINOR 변경까지도 허용한다.

  • ~1.2.3 : >= 1.2.3 < 1.3.0
  • ~1.2 : >= 1.2.0 < 1.3.0 : 1.2.x
  • ~1 : >= 1.0.0 < 2.0.0 : 1.x

Caret (^) 범위

하위 호환성이 보장되는 업데이트를 진행한다.

^1.2.3 : >= 1.2.3 < 2.0.0
^1.2 : >= 1.2.0 < 2.0.0
^1 : >= 1.0.0 < 2.0.0
^0.1.2 : >= 0.1.2 < 0.2.0 (예외: 버전이 1.0.0 미만인 경우 API 변경이 수시로 일어날 수 있으므로 Tilde처럼 동작한다.)
그 외
latest : 항상 최신 버전을 적용하는 것이다.
임의의 숫자를 위해 x, X, * 사용할 수 있다.
부등호, 등호를 사용 가능하다.

출처 및 참고

[TOAST UI] 의존성 관리 - 바로가기
SemVer(Semantic Versioning) - 라이브러리 버전 관리 이야기 - 바로가기

0개의 댓글