본문 바로가기
Programming 개발은 구글로/Web[프론트엔드&백엔드]

[NPM] npm package.json 버전 명시 시 캐럿(^) 사용하기

by 40대직장인 2022. 11. 7.

npm package.json 버전 명시

 

npm 문서에는 package.json 에서 아래의 방식으로 버전 명시를 할 수 있다고 되어 있습니다.

  • 1.2.3
  • >1.2.3
  • >=1.2.3
  • <1.2.3
  • <=1.2.3
  • ~1.2.3

여기서 가장 많이 사용되는 방식이 틸드(~)를 이용한 방식입니다. 

 

🟦 틸드(~)

: 현재 지정한 버전의 마지막 자리내의 범위에서만 자동으로 업데이트를 진행합니다.

  • ~0.0.1 : >= 0.0.1 < 0.1.0
  • ~0.1.1 : >= 0.1.1 < 0.2.0
  • ~0.1    : >= 0.1.0 < 0.2.0
  • ~0       : >= 0.0 < 1.0

Node.js 와 npm의 모듈은 모두 Semantic Versioning(축약 SemVer)를 따르고 있습니다.

 

SemVer  알아보면,

  • MAJOR 버전은 API의 호환성이 깨지말한 변경사항을 의미한다.
  • MINOR 버전은 하위호환성을 지키면서 기능이 추가된 것을 의미한다.
  • PATCH 버전은 하위호환성을 지키는 범위내에서 버그가 수정된 것을 의미한다.

 

MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner,
PATCH version when you make backwards-compatible bug fixes.

 

🟩 캐럿(^)

: 캐럿(^)은 Node.js 모듈이 이 SemVer의 규약을 따른다는 것을 신뢰한다는 가정하에서 동작이 됩니다. 

 

  - 1.x.x내에서는 하위호환성이 보장되므로 그 내에서는 모두 업데이트를 진행합니다.

  • ^1.0.2 : >= 1.0.2 < 2.0
  • ^1.0    : >= 1.0.0 < 2.0
  • ^1       : >= 1.0.0 < 2.0

하지만, 버전이 1.0.0 미만인 경우는 다르게 처리가 됩니다.

 

소프트웨어 대부분에서 1.0버전을 내놓기 전에는 API 변경이 수시로 발생이 됩니다. 

버전이 1.0.0 미만인 경우 SemVer에서는 pre-release라고 부르는데, 0.1을 쓰다가 0.2를 사용하면 API가 모두 다를 수 있습니다. 그래서 캐럿(^)을 사용할 때 0.x.x에서는 틸드처럼 동작해서 지정한 버전 자릿수 내에서만 업데이트를 진행합니다.

 

  • ^0.1.2   : >= 0.1.2 < 0.2.0
  • ^0.1      : >= 0.1.0 < 0.2.0
  • ^0         : >= 0.0.0 < 1.0.0
  • ^0.0.1   : == 0.0.1

 

 

댓글