[node.js] package.json에서 물결표 (~)와 캐럿 (^)의 차이점은 무엇입니까?

나는 안정적인 최신으로 업그레이드 한 후 node그리고 npm, 나는 시도했다 npm install moment --save. package.json캐럿 ^접두사를 사용 하여 항목을 저장합니다 . 이전에는 물결표 ~접두사였습니다.

  1. 왜 이러한 변경이 이루어 npm집니까?
  2. 물결표 ~와 캐럿 의 차이점은 무엇입니까 ^?
  3. 다른 사람보다 장점이 무엇입니까?


답변

참고 항목 NPM의 문서semver 문서를

~ version“대략 버전과 동일”, 부 버전을 늘리지 않고 향후 모든 패치 버전으로 업데이트합니다. ~1.2.31.2.3에서 <1.3.0까지의 릴리스를 사용합니다.

^ 버전“호환 가능”은 주 버전을 증가시키지 않고 향후 모든 부 / 패치 버전으로 업데이트합니다. ^2.3.42.3.4에서 <3.0.0까지의 릴리스를 사용합니다.

아래의 주석을 참조하십시오.


답변

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

https://docs.npmjs.com/files/package.json

https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • ~version“버전과 대략 동일” npm semver 참조 -Tilde Ranges & semver (7)
  • ^version“버전과 호환” npm semver 참조 -Caret Ranges & semver (7)
  • version 버전과 정확히 일치해야합니다
  • >version 버전보다 커야합니다
  • >=version 기타
  • <version
  • <=version
  • 1.2.x 1.2.0, 1.2.1 등 1.3.0이 아님
  • http://sometarballurl (타르볼의 URL 일 수 있으며 로컬로 다운로드하여 설치됩니다.
  • * 모든 버전과 일치
  • latest 최신 릴리스를 얻습니다

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


답변

npm을 사용하면 지정된 것보다 최신 버전의 패키지를 설치할 수 있습니다. 물결표 ( ~)를 사용하면 버그 수정 릴리스가 제공되고 캐럿 ( ^)은 이전 버전과 호환되는 새로운 기능도 제공합니다.

문제는 이전 버전은 대개 버그 수정을 많이받지 않으므로 npm은 caret ( ^)를 기본값으로 사용합니다 --save.

셈버 테이블

에 따르면 : “Semver 설명 – 내 package.json에 캐럿 (^)이 왜?” .

참고 규칙이 1.0.0 이상 버전에 적용되지 모든 프로젝트가 의미 버전을 다음 있음. 버전 0.xx의 경우 캐럿은 패치 업데이트 만 허용 합니다. 즉, 물결표와 동일하게 동작합니다. “캐럿 범위” 참조

다음은 개념에 대한 시각적 설명입니다.

셈버 다이어그램

출처 : “Semantic Versioning Cheatsheet” .


답변

셈버

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
  • 테스트 에는 npm semver 계산기 를 사용하십시오 . (^ (같은 주요 범위의 특정 버전보다 큰 모든 것을 포함) 및 ~ (동일한 작은 범위의 특정 버전보다 큰 모든 것을 포함)에 대한 설명은 100 % 정확하지 않지만 계산기는 제대로 작동하는 것 같습니다 )
  • 또는 SemVer Check를 대신 사용 하면 패키지를 선택할 필요가없고 설명도 제공합니다.

변경 허용 또는 금지

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

모든 (희망적으로) 가능성

시작 주요 수준을 설정하고 업데이트를 위로 허용

*  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

주의 : 메이저, 마이너, 패치 누락 또는 beta숫자없이 지정하는 any것은 누락 된 레벨 과 동일 합니다.

참고 : 0주요 수준 의 패키지를 설치할 때 업데이트는 새로운 베타 / pr 수준 버전 만 설치합니다! 그 때문에 npm세트 ^에서 기본값으로 package.json때 설치된 버전처럼 0.1.3그것은 모든 주요 / 마이너 / 패치 수준을 정지.


답변

~주요 및 부수를 수정합니다. 종속성에서 버그 수정을 수용 할 준비가되었지만 호환되지 않는 변경을 원하지 않는 경우에 사용됩니다.

^주요 번호 만 수정합니다. 의존성을 면밀히 관찰 할 때 사용되며 부 릴리스가 호환되지 않는 경우 코드를 빠르게 변경할 수 있습니다.

그 외에도 ^되어 지원되지 않는 오래된 NPM 버전으로,주의를 요합니다.

따라서 ^좋은 기본값이지만 완벽하지는 않습니다. 가장 유용한 semver 연산자를 신중하게 선택하고 구성하는 것이 좋습니다.


답변

~: 합리적으로 가까이

   ~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


답변

^1. [any]. [any] (최신 부 버전)
~는 1.2입니다. [any] (최신 패치)

semver가 npm에 적용되는 방법
semver 표준 http://blog.npmjs.org/post/98131109725/npm-2-0-0에 맞추기 위해 수행하는 작업 에 대한 블로그 게시물 을 읽어보십시오.