SemVer 검사기

시맨틱 버전을 검증하고 범위를 파싱합니다.

버전으로 인정되는 것

엄격한 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 센티널입니다.

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. 왼쪽 필드에 1.2.3-beta.1+build.5 같은 버전을 붙여 넣으세요. 아래 내용은 입력하는 대로 갱신되며 누를 버튼은 없습니다.
  2. 선택적으로 오른쪽에 ^1.2.0 같은 npm 범위를 붙여 넣어 버전과 범위의 관계를 확인하세요.
  3. 먼저 배지를 읽으세요. 유효한지, 아니라면 어느 규칙이 어느 문자에서 깨졌는지 알려 줍니다.
  4. 범위의 npm includePrerelease 해석을 보려면 “프리릴리스 포함”을 선택하세요.
  5. 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 매개변수가 없으며 새로 고치면 모두 지워집니다.

브라우저 안에서만 실행되는 개발자 도우미입니다.