"devDependencies": {
"react-test-renderer": "^16.13.0",
"react-zeroconfig": "^3.27.2-alpha.2"
}
^ 와 -alpha.2 을 확인할 수 있는데, Node에서는 특히 이같은 Version Range를 권장하며 Prerelease Tags가 있냐, major가 0이냐 에 따라 달라진다.
Strict constraint (or fully qualified constraint) are those constraints matching only one version. In most case it is a bad idea to use them.Why? Because with them you are locking your dependency to a specific patch release which means you won't ever get bug fixes when updating your dependencies.
(https://jubianchi.github.io/semver-check/#/)
엄격한 제약조건은 오직 한 버전과 매칭하여 특정 patch release에 의존하는 것이기 때문에 버그가 수정되지 않는 문제가 있다.
그렇기 때문에 적절하게 version range를 설정해야 한다.
내가 어느버전까지 올릴지 범위를 정할 수 있다.
whitespace
를 사용할 수 있는데 and와 같다고 볼 수 있다. 또한 ||
(or)도 같이 쓰일 수 있다.
예시로 확인하쟈
>=1.2.7 <1.3.0
[major, minor, patch]로 본다면 이 예시는 patch 업데이트만 허용한다.
1.2.7 || >=1.2.9 <2.0.0
1.2.7 이거나 1.2.9포함 minor과 patch 업데이트 허용
알아야 하는 개념이 또 있다. 정식이 아닌 버전을 pre-release version을 나타내는 Prerelease tag이다.
정식 배포를 앞둔 pre-release version은 PATCH Version 바로 뒤에 붙임표(-)와 마침표(.)로 구분된 식별자를 더해서 표시할 수 있다.
예) 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92.
https://semver.org/lang/ko/
이제 예시를 보자
> 1.2.3-alpha.3
[major, minor, patch] 전부 일치할 경우 1.2.3일 경우 prerelease tag도 함께 포함된다. 1.2.3-alpha.4는 포함, 1.2.4도 포함 되지만 1.2.4-alpha.3은 포함되지 않는다.
이렇게 되어있는 건 2가지 이유가 있다.
🤭와우
~
사용하는 Hyphen Ranges X.Y.Z - A.B.C
x
를 사용하는 X-Ranges 1.2.x
1.X
1.2.*
~
를 사용하는 Tilde Ranges ~1.2.3
~1.2
~1
^
를 사용하는 Caret Ranges ^1.2.3
^0.2.5
^0.0.4
4가지로 구성
예시로 하나씩 알아보쟈
X.Y.Z - A.B.C
1.2.3 - 2.3.4
>=1.2.3 <=2.3.4
1.2.3과 같거나 커야하며 2.3.4보다 같거나 작어야 한다.
1.2 - 2.3.4
첫번째 버전에 생략이 있다면 0을 포함시킨다.
>=1.2.0 <=2.3.4
1.2.3 - 2.3
두번째 버전에 생략이 있다면 [major, minor] 가 일치하는 경우만 포함
>=1.2.3 <2.4
1.2.3 - 2
두번째 버전에 생략이 있다면 2로 시작하는 [major] 가 일치하는 경우만 포함
>=1.2.3 <3
1.x
marjor와 minor level의 업데이트 허용 >=1.0.0 <2.0.0
1.2.x
patch level의 업데이트 허용 >=1.2.0 <1.3.0
고급 범위 구문에서 가장 얘기가 많이 나오는 캐럿(^)과 틸트(~)는 다음편에서..
참고 Links
https://semver.org/lang/ko/
https://github.com/npm/node-semver#readme
https://developer.okta.com/blog/2019/12/16/semantic-versioning
https://poiemaweb.com/nodejs-npm#24-semantic-versioning%EC%9C%A0%EC%9D%98%EC%A0%81-%EB%B2%84%EC%A0%84
Hyphen Ranges는 -를 사용하는 것 맞나요?
~ 사용하는 Hyphen Ranges X.Y.Z - A.B.C
요 부분이 이상해보여요.