[node.js] bower (및 npm) 버전 구문은 무엇입니까?

Bower를 사용하면 다음 구문을 사용하여 패키지의 버전 요구 사항을 지정할 수 있습니다.

"dependencies": {
  "<name>": "<version>",
},

그러나에 사용할 구문이 무엇인지 찾을 수 없었습니다 <version>. 버전을 지정할 수 있음을 알고 있습니다.

  • 특정 버전보다 ">1.0.0"
  • 버전 이상 ">=1.0.0"
  • 또는 일부 범위에서 : "1.0.0 - 2.0.0".

또한 물결표를 포함하는 공통 버전 구문이 있음을 알고 "~1.0.0"있습니다. 그러나 그것이 의미하는 바와 그것이 같은지 확실하지 않습니다 "=1.0.0".

또한 정확히 1.0.3더 큰 버전과 같은 여러 비 연속 버전을 지정할 수 있는지 여부에 관심이 있습니다 1.5.0.



답변

간단히 말해서 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"


답변

semver따라 사용할 수 있습니다

  • 하이픈 범위 XYZ-ABC는
    > = 1.2.3 <= 2.3.4를
    1.2.3-2.3.4

    나타냅니다.

  • X- 범위

    1.2.x
    1.X
    1.2.*

  • 틸드 범위

    ~1.2.3
    ~1.2

    패치 수준 변경 또는 사소한 버전 변경을 허용 함을 나타냅니다.

  • 캐럿 범위 ^ 1.2.3 ^ 0.2.5 ^ 0.0.4

    [major, minor, patch] 튜플에서 0이 아닌 왼쪽 숫자를 수정하지 않는 변경을 허용합니다

    • ^1.2.x (> = 1.2.0 <2.0.0을 의미)
    • ^0.0.x (== 0.0.0 <0.1.0을 의미)
    • ^0.0 (== 0.0.0 <0.1.0을 의미)

답변

Bower는 semver 구문을 사용 합니다. 하지만 다음은 몇 가지 간단한 예입니다.

특정 버전을 설치할 수 있습니다.

$ bower install jquery#1.11.1

~를 사용하여 ‘이로 시작하는 모든 버전’을 지정할 수 있습니다.

$ bower install jquery#~1.11

여러 버전 요구 사항을 함께 지정할 수 있습니다.

$ bower install "jquery#<2.0 >1.10"


답변

latest키워드를 사용하여 사용 가능한 최신 버전을 설치할 수도 있습니다.

  "dependencies": {
    "fontawesome": "latest"
  }


답변

패치 번호가없는 경우 물결표가 아닌 버전 ~에 추가 .x하는 것과 같습니다 . 패치 번호가 있으면 ~지정된 모든 패치 번호> =를 허용하십시오.

~1     := 1.x
~1.2   := 1.2.x
~1.2.3 := (>=1.2.3 <1.3.0)

내가 허용 대답에 코멘트에 포인트가 부족하지 않지만, 물결표 정보의 일부는 문서 semver 링크와 확률에 있습니다 : "angular": "~1.2"없는 1.3, 1.4, 1.4.9 일치합니다. 또한 "angular": "~1"하고 "angular": "~1.0"있습니다 없습니다 해당. 이것은 npm semver calculator 로 확인할 수 있습니다 .


답변