SemVer 검사기
시맨틱 버전을 검증하고 범위를 파싱합니다.
버전
- MAJOR
- MINOR
- PATCH
- 프리릴리스
- 빌드 메타데이터
범위
JSON 결과
버전으로 인정되는 것
엄격한 SemVer 2.0.0 문법입니다. 세 숫자는 앞자리 0이 없는 음이 아닌 ASCII 정수입니다.
- MAJOR.MINOR.PATCH
- 호환성 깨짐 / 호환 / 수정
- 1.2.3-alpha.1
- 프리릴리스, 1.2.3보다 낮은 순위
- 1.2.3+build.5
- 빌드 메타데이터, 우선순위에서 무시
- 1.2.3-0.3
- 숫자 프리릴리스 식별자는 숫자로 비교
- v1.2.3
- 시맨틱 버전이 아님(명세 FAQ)
- 01.2.3
- 유효하지 않음: 앞자리 0
- 1.2.3-01
- 유효하지 않음: 0으로 채운 숫자 프리릴리스
- 1.2.3+0.09
- 유효: 빌드 메타데이터는 0으로 채울 수 있음
범위 연산자
- 1.2.3
- 정확히 이 버전
- ^1.2.3
- 호환: >=1.2.3 <2.0.0-0
- ~1.2.3
- 패치만: >=1.2.3 <1.3.0-0
- >=1.2.3 <2.0.0
- 한 집합 안 비교자의 AND
- 1.2.3 - 2.0.0
- 양쪽 포함 범위, 양쪽에 공백 필요
- 1.2.x / 1.x / *
- 부분 버전과 와일드카드
- a || b
- 합집합: 둘 중 하나라도 일치
- ~>1.2.3
- npm 역사적 별칭, ~1.2.3으로 처리
npm이 부분 버전을 채우는 방식
node-semver로 검증했습니다. -0 접미사는 다음 계열의 프리릴리스를 제외하는 npm 센티널입니다.
| 범위 | 펼친 결과 |
|---|---|
| ^1.2.3 | >=1.2.3 <2.0.0-0 |
| ^0.2.3 | >=0.2.3 <0.3.0-0 |
| ^0.0.3 | >=0.0.3 <0.0.4-0 |
| ^1 | >=1.0.0 <2.0.0-0 |
| ~1.2.3 | >=1.2.3 <1.3.0-0 |
| ~1.2 | >=1.2.0 <1.3.0-0 |
| ~1 | >=1.0.0 <2.0.0-0 |
| 1.2.x | >=1.2.0 <1.3.0-0 |
| 1.x | >=1.0.0 <2.0.0-0 |
| 1.2.3 - 2.0.0 | >=1.2.3 <=2.0.0 |
| 1.2.3 - 2 | >=1.2.3 <3.0.0-0 |
| >1.x | >=2.0.0 |
프리릴리스 우선순위
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
숫자 식별자는 숫자로 비교하며 영숫자 식별자보다 낮은 순위입니다. 짧은 접두사가 더 낮습니다. 빌드 메타데이터는 전혀 중요하지 않습니다.
흔한 실수
package.json과 채팅 기록에서 그대로 붙여 넣은 것들입니다.
- "1.2.3",
- package.json에서 따옴표와 쉼표가 함께 왔습니다 - 버전만 붙여 넣으세요.
- v1.2.3
- Git 태그에는 v가 붙지만 시맨틱 버전에는 없습니다.
- 1.2
- 숫자 두 개는 버전이 아니라 범위입니다.
- 1.2.3-01
- npm loose 모드는 1.2.3-1로 읽고 조용히 다시 씁니다.
어떤 규칙을 사용하나
- 버전 문자열 판정은 엄격한 SemVer 2.0.0입니다. loose 모드, 재작성, 정규화가 없습니다.
- 범위는 npm node-semver를 따릅니다. SemVer 명세는 범위를 정의하지 않기 때문입니다.
- 이 도구는 범위에서 npm보다 엄격합니다. 범위 안의 v 접두사나 앞자리 0은 거부되고, ||의 빈 쪽은 “모든 버전”이 아니라 오류입니다.
- 잘못된 버전에 표시되는 npm 해석은 semver.valid(v, {loose:true})와 semver.coerce(v)에서 옵니다. 정보일 뿐이며 통과를 뜻하지 않습니다.
- 위치는 코드 포인트를 세며 인터페이스에서는 1부터, JSON에서는 0부터 시작합니다.
사용 방법
- 왼쪽 필드에 1.2.3-beta.1+build.5 같은 버전을 붙여 넣으세요. 아래 내용은 입력하는 대로 갱신되며 누를 버튼은 없습니다.
- 선택적으로 오른쪽에 ^1.2.0 같은 npm 범위를 붙여 넣어 버전과 범위의 관계를 확인하세요.
- 먼저 배지를 읽으세요. 유효한지, 아니라면 어느 규칙이 어느 문자에서 깨졌는지 알려 줍니다.
- 범위의 npm includePrerelease 해석을 보려면 “프리릴리스 포함”을 선택하세요.
- JSON 결과를 펼쳐 전체 문제 목록을 복사하거나 내려받으세요.
예제
버전 + 범위
1.2.3-beta.1+build.5 ^1.2.0
결과
유효한 SemVer(MAJOR 1, MINOR 2, PATCH 3, 프리릴리스 beta.1, 빌드 build.5). ^1.2.0은 >=1.2.0 <2.0.0-0으로 펼쳐지며 범위는 [1.2.0, 2.0.0)입니다. 판정: 충족하지 않음 - 집합에 1.2.3용 프리릴리스 비교자가 없습니다.
“프리릴리스 포함”을 선택하면 같은 조합이 충족으로 바뀝니다.
제한 사항
- 판정은 엄격한 SemVer 2.0.0이므로 npm loose 모드가 허용하거나 다시 쓰는 v1.2.3과 1.2.3-01도 거부됩니다.
- 범위는 npm node-semver만 따릅니다. git describe, Cargo, PEP 440, Go 모듈 버전은 범위 밖입니다.
- 레지스트리 조회가 없습니다. ^1.2.0이 실제로 어떤 버전을 설치할지는 알려 주지 못합니다.
- 한 번에 버전 하나와 범위 하나입니다. 일괄 목록, 정렬, 쌍별 비교, 범프 미리보기는 없습니다.
- Number.MAX_SAFE_INTEGER를 넘는 핵심 숫자는 표시되며 JS 숫자로 변환하지 않고 텍스트로 비교합니다.
- 아무것도 페이지를 떠나지 않습니다. 네트워크, 저장소, URL 매개변수가 없으며 새로 고치면 모두 지워집니다.
관련 도구
브라우저 안에서만 실행되는 개발자 도우미입니다.