npm semantic versioning
npm의 패키지 생태계를 건강하게 관리하기 위해서, 정해진 규칙에 따라 버전의 이름을 변경한다. 버전은 x.x.x의 형태를 가지며 다음과 같은 규칙을 가진다.
- x.0.0: 주 버전(major) - 기존 버전과 호환되지 않는 api 변경에 일어날 때 주 버전을 올린다
- 0.x.0: 부 버전(minor) - 기존 버전과 호환되면서 새로운 기능이 추가됐을 떄 부 버전을 올린다
- 0.0.x: 수 버전(patch) - 기존 버전과 호환되면서 버그가 수정되었을 때 수 버전을 올린다
일반적으로 초기 릴리즈는 1.0.0부터 시작하지만, 버전이 1.0.0 미만일 수도 있다(0.1.0부터 시작하는 경우). 이 경우 pre-release라고 불리며 1.0.0 버전 이전까지 api가 수시로 변경되는 초기 개발 단계라고 볼 수 있다.
의존 패키지 버전 범위 지정 방법
tilde(~): 마이너 버전이 명시 되어 있다면 패치 레벨의 변경만 허락. 마이너 버전이 명시되어 있지 않다면 마이너 레벨의 변경까지 허락
- ~1.2.1: ≥1.2.1 && <1.3.0
- ~1.0.4: ≥1.0.4 && <1.1.0
- ~1.2: ≥1.2.0 && <1.3.0
- ~1: ≥1.0.0 && <2.0.0
caret(^): 명시된 버전이 1.0.0 이상일 경우 메이저 레벨을 제외한 모든 변경을 허락. 1.0.0 미만 0.1.0 이상일 경우 패치 레벨의 변경만 허락. 0.1.0 미만일 경우 어떠한 변경도 허락하지 않음
- ^1.2.5: ≥1.2.5 && <2.0.0
- ^0.1.2: ≥0.1.2 && <0.2.0
- ^0.0.2: 0.0.2
참고자료
npm package.json에서 틸드(~) 대신 캐럿(^) 사용하기 :: Outsider’s Dev Story