본문으로 건너뛰기

Semver 범위 확인

Semver Range Tester

범위에 맞는 버전을 확인하고 두 버전을 비교하며 목록을 우선순위대로 정렬합니다.

시맨틱 버저닝에 대해 사람들이 실제로 궁금해하는 두 가지에 답합니다. 이 버전이 이 범위에 들어가는가, 그리고 이 목록 중에 npm이 무엇을 설치하는가입니다. 두 버전의 우선순위를 비교하고, `npm version`의 각 종류가 어떤 값을 만드는지도 보여 줍니다.

🔒 브라우저 안에서만 처리semverversionnpm

범위

해당 범위: 1.0.0 이상, 2.0.0 미만

npm의 범위 문법입니다. `^` `~` `x` `-` `||`와 비교 연산자를 씁니다. semver.org에는 이 문법이 없습니다. 거기서 정하는 것은 버전 형식과 순서뿐입니다.

버전 목록

한 줄에 하나씩, 또는 쉼표로 구분해서 씁니다.

어떤 것이 맞는지

프리릴리스
  1. —1.0.0-alpha
  2. —1.0.0-alpha.1
  3. —1.0.0-alpha.beta
  4. —1.0.0-beta
  5. —1.0.0-beta.2
  6. —1.0.0-beta.11
  7. —1.0.0-rc.1
  8. 해당1.0.0
  9. 해당1.2.0설치될 버전
  10. —2.0.0-rc.1
  11. —2.0.0
  12. —2.1.3

둘을 비교

순서

1.0.0-beta.11이 더 높음

차이

prerelease

우선순위는 semver.org 11절을 그대로 따릅니다. 빌드 메타데이터도 포함해서 — 즉, 무시해서 — 비교합니다.

다음 버전

릴리스 종류마다 나오는 버전.
major2.0.0
minor1.3.0
patch1.2.4
premajor2.0.0-alpha.0
preminor1.3.0-alpha.0
prepatch1.2.4-alpha.0
prerelease1.2.4-alpha.0

`npm version <종류>`가 만들어 낼 값입니다.

모두가 한 번은 놀라는 규칙이 있습니다. 프리릴리스는 범위 자체가 같은 major.minor.patch의 프리릴리스를 언급할 때만 그 범위에 들어갑니다. 그래서 ^1.0.0은 2.0.0-beta.1을 포함하지 않고, rc 태그가 실수로 설치되는 일이 없습니다.

사용 방법

  1. 범위를 씁니다

    `^1.0.0`, `~1.2.3`, `>=1.2.7 <1.3.0`, `1.2.3 - 2.3.4`, `||`를 모두 씁니다. 그것이 무엇에 해당하는지 풀어 쓴 설명이 아래에 나옵니다.

  2. 가진 버전들을 붙여넣습니다

    한 줄에 하나씩 또는 쉼표로 구분해서 넣습니다. `npm view <패키지> versions`의 출력을 그대로 붙여넣어도 됩니다. 각각 해당 여부가 표시되고, npm이 설치할 것에 라벨이 붙습니다.

  3. 둘을 비교하거나 다음 릴리스를 계획합니다

    비교 칸은 semver.org 11절을 그대로 따릅니다. 올림 표는 주어진 시작 버전에서 `npm version major`, `preminor` 등이 무엇을 만드는지 보여 줍니다.

자주 묻는 질문

`^1.0.0`은 왜 `2.0.0-beta.1`에 안 맞나요?

이유가 두 개 겹쳐 있습니다. `^1`은 메이저 2에 닿지 않고, 그와 별개로 프리릴리스는 범위 자체가 같은 major.minor.patch의 프리릴리스를 언급할 때만 그 범위에 들어갑니다. 두 번째 규칙 덕분에 `rc` 태그가 실수로 설치되지 않습니다.

`^0.2.3`은 왜 다르게 동작하나요?

1.0.0 아래에서는 캐럿이 마이너까지 조여집니다. `^0.2.3`은 0.2.x는 허용하지만 0.3.0은 허용하지 않습니다. 0.x 프로젝트는 마이너마다 깨진다고 보기 때문입니다. semver.org가 아니라 npm의 규칙이고, 매번 사람들을 놀라게 합니다.

`1.0.0+build.1`과 `1.0.0`은 다른가요?

문자열은 다르지만 우선순위는 같습니다. 10절이 비교할 때 빌드 메타데이터를 무시한다고 정합니다. 그래서 빌드 메타데이터만 다른 버전들을 정렬하면 순서가 안정적이지 않고, 둘 사이에 순서를 매길 수도 없습니다.

범위 문법도 semver의 일부인가요?

아닙니다. semver.org는 버전 형식과 두 버전의 비교 방법까지만 정합니다. `^`, `~`, `x`, `||`는 npm의 범위 문법이고, 다른 생태계들은 그걸 빌려 쓰거나 다른 것을 씁니다. Cargo, Composer, pip이 세부에서 서로 다릅니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.