node.js 유용한 모듈 (11) - semvar
원문 링크 - http://www.catonmat.net/blog/nodejs-modules-semver/
본 게시글은 원저자의 허락을 얻어 번역한 것입니다.
9회 연재 - redis (redis 클라이언트 라이브러리)
10회 연재 - express (경량의 고속 웹 프레임워크)
오늘 소개할 모듈은 semver다. semver는 semantic versioning(역자주-의미있는 버전번호 붙이기?)의 형식으로 작성된 버전을 파싱하는 모듈이다. [역자주-sematic versioning에 대해서 관심있는 분들은 http://semver.org/을 참조해라] semver는 npm 개발자인 Isaac Z. Schlueter에 의해 작성됐다. semver는 npm에서 모든 node.js 모듈의 버전 문제를 해결하기 위해 사용된다.
다음은 예제 코드이다.
semver.valid('1.2.3') // true semver.valid('a.b.c') // false semver.clean(' =v1.2.3 ') // '1.2.3' semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true semver.gt('1.2.3', '9.8.7') // false semver.lt('1.2.3', '9.8.7') // true
두 개의 서로 다른 버전의 모듈이 주어지고, 이 중 더 최신 버전의 모듈을 찾을 경우, 다음 알고리즘에 따라 처리된다.
[역자주 - 버전 형식은 X.Y.Z (메이저.마이너.패치) 형태로 작성된다.]
- 메이저 번호가 다르면, 메이저 번호가 큰 것이 더 최신 버전이다. 예) 2.3.4 > 1.3.4
- 마이너 번호가 다르면, 마이너 번호가 더 큰 모듈이 선택된다. 예) 2.3.4 > 2.2.4
- 패치 번호가 다르면, 패치 번호가 더 큰 모듈이 선택된다. 예) 2.3.4 > 2.3.3
- 두 모듈 중 하나가 빌드 번호를 가지고 있다면, 빌드 번호를 가진 모듈이 선택된다. 예) 2.3.4-0 > 2.3.4
- 두 모듈 다 빌드 번호를 가지고 있으며 빌드 번호가 다르면, 빌드 번호가 더 큰 모듈이 선택된다. 예) 2.3.4-10 > 2.3.4-9
- 두 모듈 중 하나가 태그를 가지고 있다면, 태그가 없는 모듈이 선택된다. 예) 2.3.4 > 2.3.4-beta
- 두 모듈 다 태그를 가지고 있다면, 사전순으로 뒤에 오는 태그를 가진 모듈이 선택된다. 예) 2.3.4-beta > 2.3.4-alpha.
- 여기까지 왔다면, 두 모듈의 버전은 같다.
semver는 다음과 같은 범위와 스타일을 지원한다.
>1.2.3
은 해당 버전보다 큰 것을 의미한다.<1.2.3
은 특정 버전보다 작은 것을 의미한다.1.2.3 - 2.3.4
은>=1.2.3 <=2.3.4
을 의미한다.~1.2.3
은>=1.2.3 <1.3.0
을 의미한다.~1.2
은>=1.2.0 <2.0.0
을 의미한다.~1
은>=1.0.0 <2.0.0
을 의미한다.1.2.x
은>=1.2.0 <1.3.0
을 의미한다.1.x
은>=1.0.0 <2.0.0
의미한다.
범위는 공백 문자 ('and'를 의미)나 ||
('or'를 의미) 와 결합할 수 있다.
semver는 다음 함수들도 지원한다:
valid(v)
- 파싱된 버전을 리턴한다. 만약 잘못된 버전 형식이라면 null을 리턴.inc(v, release)
- 릴리즈 타입(메이저, 마이너, 패치, 빌드)에 해당하는 버전 번호를 증가시킨다. 실패할 경우 null을 리턴.
semver는 다음과 같은 버전 비교도 지원한다:
gt(v1, v2)
-v1 > v2
.gte(v1, v2)
-v1 >= v2
.lt(v1, v2)
-v1 < v2
.lte(v1, v2)
-v1 <= v2
.eq(v1, v2)
-v1 == v2
.neq(v1, v2)
-v1 != v2
.cmp(v1, comparator, v2)
- comparator 인자에 위에서 설명한 '=='나 '<='와 같은 비교 문자열을 넘긴다. "==="나 "!=='를 비교 문자열로 넘기면 단순히 문자열 비교가 이뤄진다. 비교 문자열이 잘못된 경우 에러가 발생한다.compare(v1, v2)
- v1==v2 이면 0을 리턴, v1이 크면 1, v2가 크면 -1을 리턴함. 버전의 배열에서 Array.sort() 함수의 인자로 넘기면 오름차순 정렬이됨.rcompare(v1, v2)
- compare 함수의 반대. 버전을 구성된 배열에서 Array.sort() 함수의 인자로 넘기면, 버전 번호가 내림차순으로 정렬됨.
semver는 다음의 범위 함수들도 지원한다.
validRange(range)
- range에 해당하는 범위를 리턴한다.satisfies(version, range)
- version이 주어진 range를 만족하면 truemaxSatisfying(versions, range)
- range를 만족하는 리스트들 중 가장 최신 버전을 리턴.
semver
는 npm을 통해 다음과 같이 설치할 수 있다.
npm install semver
Semver의 GitHub 사이트: https://github.com/isaacs/node-semver.
Enjoy!
If you love these articles, subscribe to my blog for more, follow me on Twitter to find about my adventures, and watch me produce code on GitHub!