Semver
인증된 제출자composer/semver
버전 비교 라이브러리로, 유틸리티, 버전 제약 파싱 및 유효성 검사 기능을 제공합니다.
composer/semver README
버전 비교 라이브러리로, 유틸리티, 버전 제약 파싱 및 유효성 검사를 제공합니다.
가능한 한 semver(시맨틱 버저닝) 규칙을 따르지만, PHP의 version_compare 동작 및 하위 호환성으로 인해 semver 사양을 완전히 엄격하게 구현하지는 않습니다.
원래 composer/composer 프로젝트의 일부로 작성되었으며, 현재는 독립 라이브러리로 분리되어 제공됩니다.
설치
아래 명령어로 최신 버전을 설치합니다:
composer require composer/semver요구 사항
- PHP 5.3.2 이상 (최신 버전의 PHP 사용을 강력히 권장합니다)
버전 비교 방식
버전이 어떻게 비교되는지에 대한 자세한 내용은 getcomposer.org 문서의 Versions 항목을 참고하세요.
기본 사용법
유효성 검사 / 정규화
Composer\Semver\VersionParser 클래스는 버전 및 제약 조건의 파싱, 정규화, 유효성 검사를 위한 메서드를 제공합니다.
숫자 버전은 내부적으로 4개 구성 요소 형식으로 정규화됩니다 (예: 1.2.3 → 1.2.3.0). 이는 version_compare와의 호환성 및 내부 일관성을 위한 처리이며, 정규화된 버전 문자열은 최종 사용자에게 그대로 노출하지 않는 것이 좋습니다.
버전 관련 메서드:
isValid($version)normalize($version, $fullVersion = null)normalizeBranch($name)normalizeDefaultBranch($name)
제약 조건 관련 메서드:
parseConstraints($constraints)
안정성 관련 메서드:
parseStability($version)normalizeStability($stability)
버전 비교
Composer\Semver\Comparator 클래스는 두 버전을 비교하는 정적 메서드를 제공합니다:
greaterThan($v1, $v2)—$v1 > $v2greaterThanOrEqualTo($v1, $v2)—$v1 >= $v2lessThan($v1, $v2)—$v1 < $v2lessThanOrEqualTo($v1, $v2)—$v1 <= $v2equalTo($v1, $v2)—$v1 == $v2notEqualTo($v1, $v2)—$v1 != $v2
각 메서드는 두 버전 문자열을 인수로 받아 bool 값을 반환합니다. 사용 예시:
use Composer\Semver\Comparator;
// 1.25.0 이 1.24.0 보다 큰지 확인
Comparator::greaterThan('1.25.0', '1.24.0'); // trueSemver
Composer\Semver\Semver 클래스는 버전 제약 조건 충족 여부 확인 및 정렬 메서드를 제공합니다:
satisfies($version, $constraints)— 특정 버전이 제약 조건을 만족하는지 확인satisfiedBy(array $versions, $constraint)— 버전 배열 중 제약 조건을 만족하는 항목 반환sort($versions)— 버전 배열을 오름차순 정렬rsort($versions)— 버전 배열을 내림차순 정렬
Intervals
Composer\Semver\Intervals 정적 클래스는 복잡한 제약 조건을 다루거나, 제약 조건에서 버전 구간 정보를 읽을 때 유용한 유틸리티를 제공합니다:
use Composer\Semver\Intervals;
// $candidate가 $constraint의 부분집합인지 확인
Intervals::isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint);
// $a와 $b의 교집합 존재 여부 확인 ($a->matches($b)와 동일)
Intervals::haveIntersections(ConstraintInterface $a, ConstraintInterface $b);
// 복잡한 멀티 제약 조건을 가능한 한 작은 단위로 병합하여 최적화
// 단, 처리 속도가 느릴 수 있으며 결과 제약 조건에는 사람이 읽기 좋은
// prettyConstraint가 설정되지 않습니다
Intervals::compactConstraint(ConstraintInterface $constraint);
// 주어진 제약 조건을 숫자 구간 배열과 브랜치 제약 배열로 변환
Intervals::get(ConstraintInterface $constraint);
// 제약 조건 처리가 끝난 후 메모이제이션 캐시 초기화
Intervals::clear();각 메서드의 상세 동작은 클래스의 docblock 주석을 참고하세요.
라이선스
composer/semver는 MIT 라이선스를 따릅니다. 자세한 내용은 LICENSE 파일을 확인하세요.