간단히 말해서 Bower 버전 번호 (및 NPM)의 구문을 SemVer라고하며 '시맨틱 버전 관리 (Semantic Versioning)'의 줄임말입니다. Node / npm 내의 semver 파서 용 API에서 Bower 및 NPM에 사용 된 SemVer의 자세한 구문에 대한 문서를 찾을 수 있습니다 . semver.org 에서 기본 스펙 ( 다른 구문 세부 사항은 언급 하지 않음) 에 대해 자세히 알아볼 수 있습니다 .~
가지고 다닐 수 있는 매우 유용한 비주얼 셈버 계산기가있어이 모든 것을 쉽게 확인하고 테스트 할 수 있습니다.
SemVer는 단순한 구문이 아닙니다! API를 게시하는 올바른 방법에 대해 말해야 할 흥미로운 사실이 있는데, 이는 구문의 의미를 이해하는 데 도움이됩니다. 결정적으로 :
퍼블릭 API를 식별 한 후에는 버전 번호를 특정 단위로 변경하여 변경 사항을 전달합니다. XYZ (Major.Minor.Patch)의 버전 형식을 고려하십시오 . API에 영향을주지 않는 버그 수정은 패치 버전을 증가시키고 이전 버전과 호환되는 API 추가 / 변경은 부 버전을 증가시키고 하위 버전과 호환되지 않는 API 변경은 주 버전을 증가시킵니다.
따라서 귀하의 특정 질문 ~
은 해당 Major.Minor.Patch 스키마와 관련이 있습니다. (관련 캐럿 연산자와 마찬가지로 ^
) 사용할 수있는 ~
버전의 범위를 좁히는 데 사용할 수 있습니다 .
- 동일한 부 버전으로의 후속 패치 레벨 변경 ( "버그 수정은 API에 영향을 미치지 않습니다" ) 또는
- 동일한 메이저 버전에 대한 후속 마이너 레벨 변경 ( "이전 버전과 호환되는 API 추가 / 변경" )
예를 들어 1.2.x 트리에서 1.2.0으로 시작하지만 1.3.0보다 작은 이후의 패치 수준 변경을 수행하려면 다음을 사용할 수 있습니다.
"angular": "~1.2"
or:
"angular": "~1.2.0"
또한 .x
구문 을 사용하는 것과 동일한 결과를 얻습니다 .
"angular": "1.2.x"
그러나 물결표 / ~
구문을 더 구체적으로 사용할 수 있습니다. 1.2.4로 시작 하지만 여전히 1.3.0 미만의 패치 수준 변경 만 기꺼이 받아들이 려면 다음을 사용하십시오.
"angular": "~1.2.4"
당신이 사용하는 경우 주요 버전을 향해 왼쪽으로 이동 ...
"angular": "~1"
...와 같습니다 ...
"angular": "1.x"
or:
"angular": "^1.0.0"
... 1.0.0 이상 2.0 미만의 사소한 또는 패치 수준 변경 사항과 일치합니다.
위의 마지막 변형은 '캐럿 범위' 라고합니다 . 캐럿은처럼 끔찍한 것처럼 보이 >
므로 " 1.0.0 보다 큰 버전"을 의미한다고 생각하면 변명 할 수 있습니다 . (나는 확실히 그것에 미끄러졌다.) 아니!
캐럿 범위는 기본적으로 가장 왼쪽의 유효 숫자 (일반적으로 주 버전) 에만 관심이 있고 가장 왼쪽의 숫자에 영향을 미치지 않는 사소한 또는 패치 수준의 변경을 허용 한다고 말하는 데 사용됩니다 . 그러나 메이저 버전을 지정하는 물결표 범위와 달리 캐럿 범위를 사용하면 정확한 부 / 패치 시작점을 지정할 수 있습니다. 따라서 ^1.0.0 === ~1
캐럿 범위 ^1.2.3
는 변경 사항이 있다고 말할 수 있습니다 >=1.2.3 && <2.0.0
. 물결표 범위로는 그렇게 할 수 없었습니다.
가까이서 보면 처음에는 혼란스러워 보입니다. 그러나 잠깐 동안 축소하고 다음과 같이 생각 하십시오. 캐럿은 가장 중요한 숫자가 무엇이든 가장 염려한다고 말할 수 있습니다. 물결표를 사용하면 가장 오른쪽에있는 숫자가 가장 걱정된다고 말할 수 있습니다. 나머지는 상세하다.
사람들이 왜 단순한 .x
구문 보다 훨씬 더 많이 사용하는지 설명하는 것은 물결표와 캐럿의 표현력 입니다. 그래서 물결표가 자주 사용되는 곳에서도 물결표가 자주 사용되는 .x
것을 볼 수 있습니다. 예를 들어, npm 자체를 참조하십시오. 자체 package.json 파일은 사용할 수~2.4.0
있는 2.4.x
형식이 아닌 형식으로 많은 종속성을 포함 합니다. 을 고수함으로써 구문은 허용되는 시작 패치 번호에 관계없이 70 개 이상의 버전 종속 항목 목록과 일치합니다.~
어쨌든 여전히 SemVer에는 더 많은 것이 있지만 여기서 자세히 설명하지는 않습니다. 노드 semver 패키지의 readme 에서 확인하십시오 . 그리고 SemVer의 작동 방식에 대해 연습하고 이해하는 동안 의미 체계 버전 계산기 를 사용해야 합니다.
RE : 비 연속 버전 번호 : OP의 최종 질문은 비 연속 버전 번호 / 범위 지정에 관한 것 같습니다 (공평하게 편집 한 경우). 예, 일반적인 이중 파이프 "또는"연산자를 사용하면 ||
됩니다. 이렇게 :
"angular": "1.2 <= 1.2.9 || >2.0.0"