package.json의 틸드 (~)와 캐럿 (^)의 차이점은 무엇입니까?
질문
최신 안정 노드와 NPM으로 업그레이드 한 후에는 NPM 설치 순간을 시도했습니다.Caret ^ 접두어가있는 Package.json의 항목을 저장합니다.이전에는 물결표였습니다.
- Why are these changes made in
npm
? - What is the difference between tilde
~
and caret^
? - 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 (^)을 - 저장의 기본값으로 사용합니다.

다음에 따라 : "Semver Explained - 왜 내 Package.json에 캐럿 (^)이 있는가?".
규칙은 1.0.0 이상의 버전에 적용되며 모든 프로젝트가 의미 론적 버전을 따르는 것은 아닙니다.버전 0.x.x의 경우 캐럿은 패치 업데이트 만 허용합니다. 즉, 물결표와 동일하게 작동합니다."캐럿 범위"를 참조하십시오.
개념에 대한 시각적 인 설명은 다음과 같습니다.

출처 : "시맨틱 버전 관리 치트 시트".
답변
셈어
<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
최근댓글