원문 링크 - http://www.catonmat.net/blog/nodejs-modules-semver/

본 게시글은 원저자의 허락을 얻어 번역한 것입니다.

1회 연재 - dnode (RPC 라이브러리)

2회 연재 - optimist (옵션 파서)

3회 연재 - lazy (lazy 리스트 처리)

4회 연재 - request (HTTP 스트림 처리)

5회 연재 - hashish (해시 처리)

6회 연재 - read (쉬운 표준 입력 처리)

7회 연재 - ntwitter (트위터 API)

8회 연재 - socket.io (웹소켓 통신)

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를 만족하면 true
  • maxSatisfying(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!