package.json의 틸드 (~)와 캐럿 (^)의 차이점은 무엇입니까?


질문

 

최신 안정 노드와 NPM으로 업그레이드 한 후에는 NPM 설치 순간을 시도했습니다.Caret ^ 접두어가있는 Package.json의 항목을 저장합니다.이전에는 물결표였습니다.

  1. Why are these changes made in npm?
  2. What is the difference between tilde ~ and caret ^?
  3. What are the advantages over others?

답변

 

NPM 문서 및 셈어 문서를 참조하십시오.

~ 버전 "버전과 거의 동일한 버전"은 미래 버전을 증가시키지 않고 모든 향후 패치 버전으로 업데이트합니다.~ 1.2.3은 1.2.3에서 <1.3.0으로 릴리스를 사용할 것입니다. ^ 버전과 호환되는 버전 "은 주요 버전을 증가시키지 않고 모든 미래의 사소한 / 패치 버전으로 업데이트됩니다.^ 2.3.4는 2.3.4에서 <3.0.0으로 릴리스를 사용합니다.

특히 예외, 특히 사전 0.2.3과 같은 예외에 대해서는 아래 의견을보십시오.



답변

공식 NPMJS 문서를 추가하고 싶습니다. 질문에 언급 된 것들을 포함한 버전 특이성을위한 모든 방법을 설명하고 싶습니다.

value desc
~version "Approximately equivalent to version"
See npm semver - Tilde Ranges
^version "Compatible with version"
See npm semver - Caret Ranges
version Must match version exactly
>version Must be greater than version
>=version etc
<version
<=version
1.2.x 1.2.0, 1.2.1, etc., but not 1.3.0
* Matches any version
latest Obtains latest release

위 목록은 철저한 것이 아닙니다.다른 버전 지정자가 포함 된 GitHub URL 및 GitHub 사용자 Repo의, 로컬 경로 및 특정 NPM 태그가있는 패키지가 포함됩니다.

공식 문서

NPM 문서> package.json> 종속성 NPM 문서> 셈어> 버전 셈어 (7)



답변

NPM을 사용하면 지정된 것보다 새로운 버전의 패키지를 설치할 수 있습니다.tilde (~)를 사용하면 버그 수정 릴리스가 제공되며 캐럿 (^)은 거꾸로 호환 가능한 새로운 기능을 제공합니다.

문제는 오래된 버전이 일반적으로 버그 수정을받지 못하고 NPM은 CARET (^)을 - 저장의 기본값으로 사용합니다.

node.js

다음에 따라 : "Semver Explained - 왜 내 Package.json에 캐럿 (^)이 있는가?".

규칙은 1.0.0 이상의 버전에 적용되며 모든 프로젝트가 의미 론적 버전을 따르는 것은 아닙니다.버전 0.x.x의 경우 캐럿은 패치 업데이트 만 허용합니다. 즉, 물결표와 동일하게 작동합니다."캐럿 범위"를 참조하십시오.

개념에 대한 시각적 인 설명은 다음과 같습니다.

node.js

출처 : "시맨틱 버전 관리 치트 시트".



답변

셈어

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2

테스트를 위해 NPM Semver Calculator를 사용하십시오.^ (동일한 주요 범위의 특정 버전보다 큰 모든 것을 포함 함) 및 ~ (동일한 사소한 범위에서 특정 버전보다 큰 모든 것을 포함 함)는 100 % 올바른 것은 아닙니다. 계산기가 잘 작동하는 것 같습니다. 또는 대신 셈어 검사를 사용하여 패키지를 선택할 필요가 없으며 설명을 제공합니다.

변경을 허용하거나 허용하지 않습니다

핀 버전 : 1.2.3. ^ (같은 머리)를 사용하십시오.왼쪽에서 두 번째가 아닌 레벨의 업데이트를 허용합니다. ^ 0.2.3은 0.2.3 <= V <0.3을 의미합니다. ~ (꼬리처럼).일반적으로 오른쪽 수준을 정지하거나 생략하면 0을 설정하십시오. ~ 1은 1.0.0 <= <2.0.0을 의미합니다 ~ 1.2는 1.2.0 <= <1.3.0을 의미합니다. ~ 1.2.4는 1.2.4 <= v <1.3.0을 의미합니다. 가장 큰 수준 : 0.2는 0.2 <= v <1을 의미합니다 ~ : 생략 된 레벨 버전 시작은 항상 0입니다 SubleVels를 지정하지 않고 주요 버전을 시작할 수 있습니다.

모든 (잘하면) 가능성

주요 수준을 시작하고 업데이트를 위로 허용합니다

*  or "(empty string)   any version
1                         v >= 1

주요 수준의 동결

~0 (0)            0.0 <= v < 1
0.2               0.2 <= v < 1          // Can't do that with ^ or ~ 
~1 (1, ^1)        1 <= v < 2
^1.2              1.2 <= v < 2
^1.2.3            1.2.3 <= v < 2
^1.2.3-beta.4     1.2.3-beta.4 <= v < 2

고정 경미한 수준

^0.0 (0.0)        0 <= v < 0.1
~0.2              0.2 <= v < 0.3
~1.2              1.2 <= v < 1.3
~0.2.3 (^0.2.3)   0.2.3 <= v < 0.3
~1.2.3            1.2.3 <= v < 1.3

패치 수준 정지

~1.2.3-beta.4     1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed)
^0.0.3-beta       0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed)
^0.0.3-beta.4     0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed)

업데이트를 허용하지 않습니다

1.2.3             1.2.3
^0.0.3 (0.0.3)    0.0.3

주의 사항 : Major, Minor, Patch 또는 Number가없는 베타를 지정하는 것은 누락 된 레벨과 동일합니다.

주의 사항 : 주요 수준으로 0이있는 패키지를 설치하면 업데이트는 새로운 베타 / PR 레벨 버전 만 설치합니다!NPM이 Package.json에서 기본값으로 설정되고 설치된 버전이 0.1.3과 같을 때 모든 주 / 사소한 / 패치 레벨을 정지하기 때문입니다.

https://docs.npmjs.com/misc/semver. https://docs.npmjs.com/files/package.json#dependencies.



답변

첫 번째 숫자 ( "전공")가 적어도 1 인 경우 :

~ 주요 및 사소한 숫자를 잠급니다.버그 수정 만 수락 할 준비가되었을 때 사용됩니다 (세 번째 번호의 증분). 그러나 다른 변경 사항을 원하지 않아서 기능을 추가하는 사소한 업그레이드도 원하지 않습니다.

^ 주요 숫자 만 잠급니다.버그 수정 (세 번째 번호의 증분 증분) 및 기능을 추가하지만 기존 코드를 끊지 않아야하는 사소한 업그레이드를 기꺼이받을 때 사용됩니다 (두 번째 숫자의 증분).그러나 기존 코드를 중단하는 변경 사항을 원하지 않습니다 (첫 번째 숫자의 증분).

그 외에도 ^는 이전 NPM 버전에서 지원되지 않으므로주의해서 사용해야합니다.

그래서 ^는 좋은 기본이지만 완벽하지는 않습니다.나는 당신에게 가장 유용한 셈어 운영자를 신중하게 선택하고 구성하는 것을 제안합니다.

(혼란스러운 "수정 사항"을 충돌시켜 "수정"및 "수정"및 "버그 수정"을 방지하기 위해 개정됨)



답변

~ : 합리적으로 가깝습니다

   ~1.1.5: 1.1.0 <= accepted < 1.2.0

^ : 호환 가능

   ^1.1.5: 1.1.5 <= accepted < 2.0.0

   ^0.1.3: 0.1.3 <= accepted < 0.2.0

   ^0.0.4: 0.0.4 <= accepted < 0.1.0
출처:https://stackoverflow.com/questions/22343224/whats-the-difference-between-tilde-and-caret-in-package-json