AZ Tools

Semver 도구 (파서·비교기·범프)

개발

npm·Cargo·Go 모듈 등 어떤 패키지 생태계든 시맨틱 버전 문자열을 다루는데 — 1.10.0이 1.9.0보다 작다고 잘못 비교하거나 prerelease 태그를 놓치는 식의 실수는 몇 시간을 날리는 종류. 이 도구는 두 버전을 컴포넌트(major·minor·patch·prerelease·build)로 파싱, semver.org 공식 스펙대로(prerelease 순서 포함) 비교, 각 버전에 원클릭 범프 버튼 제공. 그 아래 범위 확장기는 가장 흔한 npm 범위 문법(^1.2.3·~1.2.3·~1.2·불안정 API용 ^0.x.y)을 명시적 ≥하한 <상한으로 변환 — 컴퍼레이터 스타일만 받는 도구에 그대로 복사 가능.

Major1
Minor2
Patch3
Prerelease
Build
Major1
Minor2
Patch10
Prerelease
Build

비교

B가 A보다 큼

매치

≥ 1.2.3·< 2.0.0

사용법

  1. Version A·B 입력에 버전 문자열 타이핑 — 파싱 결과와 비교가 라이브 업데이트.
  2. 각 버전 아래 범프 버튼(메이저/마이너/패치/프리릴리스) 클릭으로 다음 버전 계산 — 릴리스 계획에 유용.
  3. 범위 확장기에 ^1.2.3·~1.2 같은 범위 입력 → 하한·상한 표시, Copy로 ≥a.b.c <x.y.z 문자열 복사.

자주 묻는 질문

Prerelease 순서는 어떻게?
스펙대로 prerelease 있는 버전(1.0.0-alpha)이 없는 같은 버전(1.0.0)보다 작음. Prerelease 내부에선 식별자를 왼쪽부터 비교 — 숫자는 숫자로, 영숫자는 사전순으로, 같은 위치에서 숫자는 항상 영숫자보다 낮은 순위. 그래서 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0.
왜 ^0.2.3이 <0.3.0으로 확장? <1.0.0 아님?
npm의 캐럿은 0.x.y에 대해 특별 처리 — pre-1.0 API는 불안정으로 간주, 0.x의 범프는 breaking으로 처리. 그래서 ^0.2.3은 0.2.x만, ^0.0.3은 0.0.3만 정확히 매치. npm 자체와 동일한 동작.
Build 메타데이터가 비교에 영향?
아니요 — 스펙상 +build 메타데이터는 정보 전용이며 버전 비교 시 무시. 1.0.0+abc와 1.0.0+xyz는 같음.
여기서 지원하는 범위 문법은?
확장기는 ^x[.y[.z]], ~x[.y[.z]], 그리고 단독 x·x.y(각각 ~x·~x.y처럼 동작) 처리. '>=1.0.0 <2.0.0' 같은 조합 범위나 '1.x' 같은 와일드카드는 확장되지 않음 — 각 버전을 따로 파싱하는 건 여전히 가능.

관련 도구