복붙노트

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

NODEJS

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

해결법


  1. 1.고궁 박물원의 문서 및 semver 문서를 참조하십시오 :

    고궁 박물원의 문서 및 semver 문서를 참조하십시오 :

    같은 ^ 0.2.3로 이전 한 버전을 위해 특히, 예외 아래 댓글보기


  2. 2.나는 사람이 질문에 언급을 포함하여 버전 특이성에 대한 모든 방법을 설명뿐만 아니라 공식 npmjs 문서를 추가하고 싶습니다 -

    나는 사람이 질문에 언급을 포함하여 버전 특이성에 대한 모든 방법을 설명뿐만 아니라 공식 npmjs 문서를 추가하고 싶습니다 -

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

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

    위의 목록은 완전한되지 않습니다. 다른 버전 지정자 특정의 NPM 태그 GitHub의 URL 및 GitHub의 사용자의 repo의 지역 경로와 패키지를 포함


  3. 3.NPM은 지정된 것보다 패키지의 최신 버전을 설치 허용한다. 물결표 (~)를 사용하면 버그 수정 릴리스와 캐럿 (^)이 아니라 당신에게 이전 버전과 호환되는 새로운 기능을 제공합니다 제공합니다.

    NPM은 지정된 것보다 패키지의 최신 버전을 설치 허용한다. 물결표 (~)를 사용하면 버그 수정 릴리스와 캐럿 (^)이 아니라 당신에게 이전 버전과 호환되는 새로운 기능을 제공합니다 제공합니다.

    문제는 이전 버전은 일반적으로 --save의 기본값으로 많은, 그래서 NPM가 사용하는 (^) 캐럿 것으로 버그 수정을받지 못한 것입니다.

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

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

    여기 개념을 시각적으로 설명입니다 :

    출처 : "시맨틱 버전 쪽지".


  4. 4.

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

    주요 레벨을 시작 설정 및 업데이트 상승 허용

    *  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
    

    주의 사항 : 메이저, 마이너, 패치 누락 또는 번호없이 베타 지정이 누락 된 수준에 대한 동일합니다.

    주의 사항 : 주요 레벨 0이있는 패키지를 설치하면 업데이트는 새로운 베타 / 홍보 수준의 버전을 설치합니다! 그의 NPM 세트 때문에 ^ package.json 기본적 때 설치된 버전이 0.1.3처럼, 그것은 모든 주요 / 마이너 / 패치 수준을 정지 때문이다.


  5. 5.~ 주요 수정 및 번호. 그것은 당신이있는 거 준비하여 의존성에 버그 수정을 적용 할 때 사용되지만, 어떤 잠재적으로 호환되지 않는 변경을 원하지 않는다.

    ~ 주요 수정 및 번호. 그것은 당신이있는 거 준비하여 의존성에 버그 수정을 적용 할 때 사용되지만, 어떤 잠재적으로 호환되지 않는 변경을 원하지 않는다.

    ^ 수정 주 번호 만. 당신이 밀접하게 종속성을보고하고 작은 릴리스가 호환되지 않을 경우 신속하게 코드를 변경 준비하고 때 사용됩니다.

    그뿐만 아니라, ^는 오래된 NPM 버전에서 지원하지 않는,주의를 요합니다.

    그래서, ^ 좋은 기본이지만, 완벽하지 않습니다. 나는 신중하게 선택하고 당신에게 가장 유용 semver 연산자를 구성하는 것이 좋습니다.


  6. 6.~ : 합리적으로 가까운

    ~ : 합리적으로 가까운

       ~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
    

  7. 7.^ 1이다 [어떤]. [어떤] (최신의 마이너 버전) ~ 1.2이다. 임의의 (최신 패치)

    ^ 1이다 [어떤]. [어떤] (최신의 마이너 버전) ~ 1.2이다. 임의의 (최신 패치)

    좋은 읽기 semver가 NPM에 어떻게 적용되는지에이 블로그 게시물입니다 그리고 그들이하고있는 것은이 semver 표준을 일치하도록 http://blog.npmjs.org/post/98131109725/npm-2-0-0


  8. 8.모자 매칭은 0.2.0에 ^ 0.1.2 업데이트 실 거예요 때문에 "깨진"고려 될 수있다. 소프트웨어가 사용 0.x.y 버전과 모자 매칭 신흥 때 마지막 VARYING 자리 (y)를 일치합니다. 이 목적에 이루어집니다. 그 이유는 소프트웨어가 API를 진화하는 동안 것은 빠르게 변화한다는 것입니다 : 언젠가는 이러한 방법과 다른 날 당신은 그 방법이 있고 오래된 것들은 사라가있다. 당신은 당신이가는 이미 라이브러리를 사용하는 사람들을위한 암호를 해독하고 주 버전을 증가하지 않으려는 경우 : 예를 1.0.0 -> 2.0.0 -> 3.0.0. 그래서, 시간에 의해 소프트웨어 마침내 100 % 수행하고 버전 11.0.0처럼 될 것입니다 그리고 그것은 매우 의미있는 보이지 않는, 실제로 혼란 보이는 모든 기능을 갖춘입니다. 당신이 있다면, 0.1.x 사용하는 반면에 -> 0.2.x - 소프트웨어가 마침내 100 % 수행하고있는 시간에 의해 다음> 0.3.x 버전이 버전 1.0.0과 수단으로 출시되는 모든 기능을 갖춘 "이 릴리스는 계속 진행하고 생산 코드에서 라이브러리의 버전을 사용할 수 있습니다, 장기 서비스이며, 저자가 내일 모든 것을 변경하거나 다음 달, 그는 패키지를 포기하지 않을 것이다."

    모자 매칭은 0.2.0에 ^ 0.1.2 업데이트 실 거예요 때문에 "깨진"고려 될 수있다. 소프트웨어가 사용 0.x.y 버전과 모자 매칭 신흥 때 마지막 VARYING 자리 (y)를 일치합니다. 이 목적에 이루어집니다. 그 이유는 소프트웨어가 API를 진화하는 동안 것은 빠르게 변화한다는 것입니다 : 언젠가는 이러한 방법과 다른 날 당신은 그 방법이 있고 오래된 것들은 사라가있다. 당신은 당신이가는 이미 라이브러리를 사용하는 사람들을위한 암호를 해독하고 주 버전을 증가하지 않으려는 경우 : 예를 1.0.0 -> 2.0.0 -> 3.0.0. 그래서, 시간에 의해 소프트웨어 마침내 100 % 수행하고 버전 11.0.0처럼 될 것입니다 그리고 그것은 매우 의미있는 보이지 않는, 실제로 혼란 보이는 모든 기능을 갖춘입니다. 당신이 있다면, 0.1.x 사용하는 반면에 -> 0.2.x - 소프트웨어가 마침내 100 % 수행하고있는 시간에 의해 다음> 0.3.x 버전이 버전 1.0.0과 수단으로 출시되는 모든 기능을 갖춘 "이 릴리스는 계속 진행하고 생산 코드에서 라이브러리의 버전을 사용할 수 있습니다, 장기 서비스이며, 저자가 내일 모든 것을 변경하거나 다음 달, 그는 패키지를 포기하지 않을 것이다."

    '소프트웨어가 아직 성숙 공개 API 변경 (그러므로 사람들이 0.2.0 갱신을받지 않습니다 ^ 0.1.0을 가진 경우 중간 숫자를 증가 그것을 해제하지 않은 경우 사용 0.xy이 버전과 원 : 규칙은 t)는 자신의 암호를 해독. 그런 다음, 소프트웨어가 성숙 할 때, 1.0.0에서 분리 한 다음 왼쪽 자리를 공개 API가 변경 될 때마다 증가 (그러므로 사람들이 갖는 ^ 1.0.0 2.0.0 갱신을받지 않습니다 그것은 자신의 암호를 해독하지 않습니다).

    Given a version number MAJOR.MINOR.PATCH, increment the:
    
    MAJOR version when you make incompatible API changes,
    MINOR version when you add functionality in a backwards-compatible manner, and
    PATCH version when you make backwards-compatible bug fixes.
    

  9. 9.~ 물결표 :

    ~ 물결표 :

    ^이 없음 :


  10. 10.당신이 1.4.2 설치 후, 버전 1.4.3를 가지고 있으며, 여러분의 package.json에 다음 설치 NPM ~ 1.4.2로 사용하는 경우 1.4.4도 가능 패키지를 설치 한 경우 물결표 ~는 부 버전을 일치 업그레이드 후 프로젝트에서 프로젝트에 1.4.4을 설치합니다. 그러나 다음은 ~에 의해 설치되지 않습니다 해당 패키지에 사용할 1.5.0가있다. 그것은 부 버전이라고합니다.

    당신이 1.4.2 설치 후, 버전 1.4.3를 가지고 있으며, 여러분의 package.json에 다음 설치 NPM ~ 1.4.2로 사용하는 경우 1.4.4도 가능 패키지를 설치 한 경우 물결표 ~는 부 버전을 일치 업그레이드 후 프로젝트에서 프로젝트에 1.4.4을 설치합니다. 그러나 다음은 ~에 의해 설치되지 않습니다 해당 패키지에 사용할 1.5.0가있다. 그것은 부 버전이라고합니다.

    1.4.2 패키지 프로젝트와 설치 1.5.0 ^ 주요 버전을 설치합니다 다음 출시 이후에 설치되어있는 경우 캐럿 ^, 주 버전과 일치합니다. 그것은 당신이 ^ 1.4.2이있는 경우 2.1.0을 설치 할 수 없습니다.

    그런 다음 "1.4.2"예컨대 어떤 특수 문자에서 고정 버전을 사용하는 각 설치에 패키지의 버전을 변경하지 않으려면 버전을 고정

    최신 버전 * 당신은 단지 다음 최신 버전을 설치 패키지 이름 앞에 *을 사용합니다.


  11. 11.하나 라이너 설명

    하나 라이너 설명

    표준 버전 major.minor.build 시스템 (예를 들어 2.4.1)

    NPM 검사 및 수정이 문자를 기반으로 특정 패키지의 버전

    예를 들면 x는 무엇이고 그것이 2.4.x를 확인합니다 ~ 2.4.1 수단

    예를 들면 : x는 무엇이고 그것이 2.x.x를 확인합니다 ^ 2.4.1 수단


  12. 12.당신은 아마 package.json에서 물결표 (~)와 캐럿 (^)을 보았다. 그들 사이의 차이점은 무엇입니까?

    당신은 아마 package.json에서 물결표 (~)와 캐럿 (^)을 보았다. 그들 사이의 차이점은 무엇입니까?

    당신이 순간 --save를 설치 NPM 할 때, 그것은 캐럿 (^) 접두사와 package.json의 항목을 저장합니다.

    간단히 말해서, 물결표 (~)는 가장 최근의 마이너 버전 (중간 번호)를 일치합니다. ~ 1.2.3 모든 1.2.x 이전 버전과 일치하지만 1.3.0를 그리워합니다.

    캐럿 (^)을, 다른 한편으로는, 더 편안하다. 그것은 가장 최근의 주요 버전 (첫 번째 숫자)로 업데이트됩니다. ^ 1.2.3은 1.3.0을 포함한 모든 1.x.x 자료와 일치하지만, 2.0.0에 보류됩니다.

    참조 : https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b


  13. 13.semver는 점으로 나뉩니다 3 개 주요 섹션에 별도입니다.

    semver는 점으로 나뉩니다 3 개 주요 섹션에 별도입니다.

    major.minor.patch
    1.0.0
    

    이 다른 메이저, 마이너 패치가 다른 버전을 식별하는 데 사용하고 있습니다. 조수 (~)와 캐럿 (^)은 패키지 버전에서 사용할 수있는 마이너 패치 버전을 식별하는 데 사용하고 있습니다.

    ~1.0.1
     Install 1.0.1 or **latest patch versions** such as 1.0.2 ,1.0.5
    ^1.0.1
     Install 1.0.1 or **latest patch and minor versions** such as 1.0.2 ,1.1.0 ,1.1.1
    

  14. 14.물결표 (~)

    물결표 (~)

    "express": "~4.13.3" 
    

    x는 아무것도 4.14.0 곳이 4.13.x를 확인합니다 ~ 4.13.3 수단

    캐럿 (^)

    "supertest": "^3.0.0"
    

    X가 무엇이고 그것이 3.x.x 확인한다 ^ 3.0.0 수단


  15. 15.버전 번호는 다른 의미로 각 구간을 지정 구문이다. 구문 도트로 구분하여 세 부분으로 나뉘어있다.

    버전 번호는 다른 의미로 각 구간을 지정 구문이다. 구문 도트로 구분하여 세 부분으로 나뉘어있다.

    major.minor.patch 1.0.2

    메이저, 마이너 패치는 패키지의 다른 버전을 나타냅니다.

    NPM은 패치 및 부 버전이 각각 사용할 지정 물결표 (~)와 캐럿 (^)를 사용합니다.

    당신이 ~ 1.0.2을 볼 경우에 따라서는 버전 1.0.2이나 1.0.4 등의 최신 패치 버전을 설치하는 것을 의미합니다. 당신이 ^ 1.0.2를 참조하면 버전 1.0.2 또는 1.1.0 등의 최신 마이너 또는 패치 버전을 설치하는 것을 의미합니다.


  16. 16.캐럿 ^ 같은 큰 범위의 특정 버전보다 모든 것을 더 포함되어 있습니다.

    캐럿 ^ 같은 큰 범위의 특정 버전보다 모든 것을 더 포함되어 있습니다.

    물결 ~ 같은 작은 범위의 특정 버전보다 모든 것을 더 포함되어 있습니다.

    예를 들어 1.0.4 상 허용되는 최대 범위 버전을 지정하기 위해, 다음과 같은 구문을 사용

    의미 론적 버전 구문에 대한 자세한 내용은 NPM semver 계산기를 참조하십시오.

    의미 론적 버전에 대해 NPM 문서에서 더 많은


  17. 17.아니 대답, 자체되었지만 것으로 보인다 관측 간과.

    아니 대답, 자체되었지만 것으로 보인다 관측 간과.

    캐럿 범위에 대한 설명 :

    참조 : https://github.com/npm/node-semver#caret-ranges-123-025-004

    즉 ^ 10.2.3 10.2.3 일치 <= V <20.0.0

    나는 그들이 무엇을 의미하는지 생각하지 않습니다. 19.x.x을 통해 버전 11.x.x에서 잡아 당기면 코드를 중단합니다.

    나는 그들이 대부분의 비 - 제로 숫자 필드를 떠났습니다 것을 의미 생각합니다. 한 자리로 숫자 필드를 필요로 SemVer에 아무것도 없다.


  18. 18.당신은 작곡가 버전에 대한 문서,하지만 여기에 짧은을 검토 할 수 있습니다이 질문에 관련 :

    당신은 작곡가 버전에 대한 문서,하지만 여기에 짧은을 검토 할 수 있습니다이 질문에 관련 :

    그래서, 물결표 함께 패치 있지만 크고 작은 버전의 자동 업데이트가 업데이트되지 않습니다 얻을 것이다. 당신이 캐럿을 사용하는 경우, 당신은 패치와 마이너 버전을 얻을 것이다,하지만 당신은 주요 (속보 변경) 버전을받지 않습니다.

    물결표 버전은 "안전"접근 간주됩니다,하지만 당신은 신뢰할 수있는 의존성 (잘 관리 라이브러리)을 사용하는 경우는 캐럿 버전 (경미한 변경 변경을 위반하지 않아야하기 때문에 아무 문제도 발생하지 않습니다.

    당신은 아마 작곡가 설치하고 작곡가 업데이트 사이의 차이점에 대한이 유래 게시물을 검토해야합니다.


  19. 19.~ 마이너 버전 출시에 specfices ^ 주 버전 릴리스 지정

    ~ 마이너 버전 출시에 specfices ^ 주 버전 릴리스 지정

    예를 들어 패키지 버전은 업데이트에 4.5.2의 경우 ~ 4.5.2 최신 4.5.x 버전을 설치합니다 (부 버전) ^ 4.5.2 최신 4.x.x 버전을 설치합니다 (주 버전)

  20. from https://stackoverflow.com/questions/22343224/whats-the-difference-between-tilde-and-caret-in-package-json by cc-by-sa and MIT license