npm 패키지 버전
포스트
취소

npm 패키지 버전

npm 패키지들의 버전은 package.json 파일에서 dependenciesdevDependencies 프로퍼티 하위의 객체로 관리되고 있습니다. 이 패키지들의 버전 표현 방식과 특정 버전을 설치할 수 있는 방법을 알아보겠습니다.

💻 Semantic Version Convention

npm 패키지의 버전은 semver (semantic versioner for npm)의 컨벤션을 따르며 아래와 같이 표현됩니다.

[Major].[Minor].[Patch]

  • Major

    이전 버전과 호환되지않는 큰 변경사항이 반영된 업데이트일 경우 해당 부분의 숫자가 증가하게 됩니다.

  • Minor

    이전 버전과 호환되는 가정하에, 새로운 기능이 추가되는 업데이트일 경우 해당 부분의 숫자가 증가하게 됩니다.

  • Patch

    기존의 버그를 수정하기 위한 업데이트일 경우에 해당 부분의 숫자가 증가하며, 이전 버전과 호환됩니다.

💻 Hyphen Ranges

X.Y.Z - A.B.C

위 표기처럼 나타내며 >= X.Y.Z <= A.B.C 를 의미합니다. 아래의 예시는 npm SemVer Calculator에서 1.2.1 - 3.4.0 범위의 lodash 버전을 조회한 결과입니다.

lodash-hyphen-version 표시한 것 처럼 1.2.13.4.0 버전을 포함하고 있는것을 알 수 있습니다.


만약 앞의 버전중 일부분만 주어졌을 경우는 생략된 부분은 0으로 대체됩니다. 즉 X.Y - A.B.C>= X.Y.0 <= A.B.C와 같습니다. 아래의 예시는 1.3 - 3.4.0 범위의 lodash 버전을 조회한 결과로 1.3.0, 3.4.0 버전이 포함된것을 볼 수 있습니다. lodash-hyphen-version-first-partial


두번째 버전중 일부분만 주어졌을 경우, 주어진 버전으로 시작하는 모든 버전이 허용되지만 그 보다 큰 버전은 허용되지 않습니다. 예를들어, 1.2.3 - 2.3 범위가 주어졌다면 2.3으로 시작하는 모든 버전을 허용되지만 2.4는 허용되지 않습니다. 이를 부등호로 표시해보면 >= 1.2.3 < 2.4로 나타낼 수 있습니다. 또한 1.2.3 - 2>= 1.2.3 < 3과 같습니다.
아래 예시는 1.3.1 - 3.3 범위의 lodash 버전을 조회한 결과 입니다. lodash-hyphen-version-second-partial 3.4이후 버전은 조회되지 않았음을 알 수 있습니다.

💻 X-Ranges

A.B.x, A.X, A.B.*, *

위와 같은 표기법을 의미합니다. X, x, * 중 하나를 사용하여 [Major].[Minor].[Patch]의 숫자중 하나를 표현할 수 있습니다.

  • *, ""
    >= 0.0.0와 같으며 모든 버전을 의미합니다.

  • A.x, A
    >= A.0.0 <(A+1).0.0와 같으며 주어진 Major 버전이 일치하는 모든 버전을 의미합니다. 다음 예시는 3.x로 조회한 lodash의 버전들입니다. lodash-x-range-version-major 3 버전과 일치하는 모든 버전이 조회되었으나 4이후의 버전은 조회되지 않았음을 알 수 있습니다. (>= 3.0.0 < 4.0.0)

  • A.B.x, A.B
    >= A.B.0 < A.(B+1).0를 의미하며, 주어진 Major, Minor 버전과 일치하는 모든 버전을 의미합니다. 아래는 4.16.x로 조회한 lodash의 버전입니다. lodash-x-range-version-major-minor

💻 Tilde Ranges

~A.B.C

위와 같은 표기법을 의미합니다. Minor 버전이 지정되었으면 Patch 버전 변경이 허용되며, 그렇지 않으면 Minor 버전 변경이 허용되는 표기법입니다. 예시는 다음과 같습니다.

  • ~1.2.3
    Minor 버전이 지정되었으므로 주어진 Major, Minor 버전을 만족하는 모든 버전을 의미합니다(Patch 버전만 변경). 즉 >= 1.2.3 < 1.(2+1).0 과 같습니다.

  • ~1.2
    >= 1.2.0 < 1.(2+1).0를 의미하며, 이는 1.2.x 와 같습니다.

  • ~1
    Minor 버전이 지정되지 않았으므로, Major 버전을 만족하는 모든 버전을 의미합니다(Minor, Patch 버전만 변경). 즉 >= 1.0.0 < (1+1).0.0 과 같으며 1.x로 표현할 수도 있습니다.

  • ~0.2.3
    >= 0.2.3 < 0.(2+1).0 와 같습니다.

  • ~0.2 >= 0.2.0 < 0.(2+1).0 과 같으며 0.2.x로 표현할 수도 있습니다.

  • ~0 >= 0.0.0 < (0+1).0.0을 의미하며, 0.x로 표현할 수도 있습니다.

  • ~1.2.3-beta.2
    >= 1.2.3-beta.2 < 1.(2+1).0을 의미합니다. 한가지 주의할 점은 prerelease 버전은 [Major].[Minor].[Patch] 체계와 다르기 때문에 1.2.4-beta.2 버전이 있다고 하더라도 위 범위에는 포함되지 않습니다.

💻 Caret Ranges

^A.B.C

위와 같은 표기법을 의미합니다. 가장 왼쪽의 0이 아닌 숫자(left-most non-zero digit)를 업데이트하지 않는 변경을 허용하는 표기법입니다.

  • ^1.2.3
    Major 버전이 가장 왼쪽의 0이 아닌 숫자이기 때문에, Minor, Patch 버전의 변경만 허용됩니다. 따라서 >= 1.2.3 < (1+1).0.0 으로 표현할 수 있습니다.

  • ^0.2.3
    Minor 버전이 가장 왼쪽의 0이 아닌 숫자이기 때문에, Patch 버전의 변경만 허용됩니다. 따라서 >= 0.2.3 < 0.(2+1).0 으로 표현할 수 있습니다.

  • ^0.0.3
    Patch 버전이 가장 왼쪽의 0이 아닌 숫자이기 때문에, 현재의 버전만 해당됩니다. >= 0.0.3 < 0.0.(3+1)로 표현할 수 있습니다.

만약 버전 중 생략된 부분이 있다면 0으로 생략된 부분을 대치해 생각하면 됩니다.

  • ^1.2.x
    ^1.2.0으로 바꿔 생각할 수 있기때문에 >= 1.2.0 < (1+1).0.0과 같습니다.

  • ^0.0.x, ^0.0
    Major, Minor가 모두 0이므로 해당값내에서 유연성을 허용합니다. 따라서 >= 0.0.0 < 0.1.0으로 표현할 수 있습니다.

  • ^1.x
    ^1.0.0와 같으므로 >= 1.0.0 < (1+1).0.0와 같습니다.

  • ^0.x
    Major가 0이므로 역시 해당값내에서 유연성이 허용되며 >= 0.0.0 < 1.0.0로 표현할 수 있습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.