package.json에서 tilde(~)와 carlet(^)의 차이점은 무엇입니까?
stable로 한 에 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠnode
그리고.npm
,나는 노력했다.npm install moment --save
에 합니다.package.json
이 있는^
접두어이전에, 그것은 타일이었습니다.~
접두어
- 이러한 변경이 이루어지는 이유는 무엇입니까?
npm
? - 타일드의 차이점은 무엇입니까?
~
캐럿 및럿^
? - 다른 사람들보다 좋은 점은 무엇입니까?
~version
"버전과 거의 동일"은 보조 버전을 늘리지 않고 이후의 모든 패치 버전으로 업데이트합니다.~1.2.3
에서는 1.2.3에서 <1.3.0까지의 릴리스를 사용합니다.^version
"Compatible with version"(버전과 호환됨)은 메이저 버전을 늘리지 않고 이후의 모든 마이너/패치 버전으로 업데이트합니다.^2.3.4
에서는 2.3.4에서 3.0.0까지의 릴리스를 사용합니다.
예외 사항은 아래 주석을 참조하십시오. 특히 ^0.2.3과 같은 사전 버전의 경우에는 예외 사항이 있습니다.
질문에 언급된 방법을 포함하여 버전 특정을 위한 모든 방법을 설명하는 공식 npmjs 문서를 추가하고 싶습니다.
가치 | 데스크 |
---|---|
~version |
버전과 거의 동일(즉, 새 패치 버전만 허용) 참조: npm semver - 타일드 범위 |
^version |
버전과 호환됨(예: 새로운 부 버전 및 패치 버전 허용) npm semver - 캐럿 범위 참조 |
version |
버전과 정확히 일치해야 함 |
>version |
버전보다 커야 함 |
>=version |
기타 |
<version |
|
<=version |
|
1.2.x |
1.2.0, 1.2.1 등(1.3.0 제외) |
* |
모든 버전과 일치 |
latest |
최신 릴리스를 가져옵니다. |
위의 목록은 완전하지 않습니다.기타 버전 지정자에는 GitHub URL 및 GitHub 사용자 repo, 로컬 경로 및 특정 npm 태그가 있는 패키지가 포함됩니다.
공식 문서
사용하면 지정된 할 수 있습니다. npm은 지정된 버전보다 최신 버전의 패키지를 설치할 수 있습니다.tilde) ~
및 을 합니다.^
는 이전 는 이전 버전과 호환되는 새로운 기능도 제공합니다.
받지 않기 은 carlet(carlet을 사용한다는 입니다.^
)을 으로 사용합니다--save
.
에 따르면: "Semver는 내 패키지에 캐럿(^)이 있는 이유를 설명했습니다."
규칙은 1.0.0 이상 버전에 적용되며 모든 프로젝트가 의미론적 버전을 따르는 것은 아닙니다.0.x.x 버전의 경우 캐럿은 패치 업데이트만 허용합니다. 즉, 캐럿은 타일과 동일하게 작동합니다."케어 범위" 참조
다음은 개념에 대한 시각적 설명입니다.
셈버
<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2
- 테스트에는 npm semver 계산기를 사용합니다.^(동일한 메이저 범위의 특정 버전보다 큰 모든 것 포함) 및 ~(동일한 마이너 범위의 특정 버전보다 큰 모든 것 포함)에 대한 설명이 100% 정확하지는 않지만 계산기는 잘 작동하는 것 같습니다.
- 대신 SemVerCheck를 사용하면 패키지를 선택할 필요가 없고 설명도 제공됩니다.
변경 허용 또는 허용 안 함
- 버전: 핀버:
1.2.3
. - 사용하다
^
으) 왼쪽에서 0이 두 할 수 있습니다.^0.2.3
은 단입니다.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
모든 주요/위험/위험 수준을 동결합니다.
첫 번째 숫자("주요")가 1 이상인 경우:
~
주 및 부숫자를 잠급니다.버그 수정(세 번째 숫자의 증가)만 허용할 준비가 되었지만 기능을 추가하는 사소한 업그레이드도 포함하여 다른 변경 사항을 원하지 않을 때 사용됩니다.
^
주 번호만 잠급니다.버그 수정(세 번째 숫자의 증가) 및 기능을 추가하지만 기존 코드를 손상시키지 않는 사소한 업그레이드(두 번째 숫자의 증가)를 받을 의향이 있을 때 사용됩니다.그러나 기존 코드(첫 번째 숫자의 증가)를 손상시키는 변경은 원하지 않습니다.
외에도, 외에도그,^
이전 npm 버전에서는 지원되지 않으므로 주의하여 사용해야 합니다.
그렇게,^
기본값은 좋지만 완벽하지는 않습니다.당신에게 가장 유용한 semver 연산자를 신중하게 선택하여 구성하는 것을 제안합니다.
("fix"와 "bug-fix"를 혼동되는 "fix"와 "bug-fix"라고 말하지 않도록 수정됨)
~
에 상당히 가깝습니다.
~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.2.3은 모든 1.2.x 버전과 일치하지만 1.3.0은 누락됩니다.
- Tilde(~)는 버그 수정 릴리스를 제공합니다.
캐럿:
^
주 번호만 고정합니다.- 종속성을 주의 깊게 관찰하고 있으며 마이너 릴리스가 호환되지 않을 경우 코드를 빠르게 변경할 준비가 되어 있을 때 사용됩니다.
- 가장 최근의 주요 버전(첫 번째 번호)으로 업데이트됩니다.
- ^1.2.3은 1.3.0을 포함한 모든 1.x.x 릴리스와 일치하지만 2.0.0에서는 보류됩니다.
- 캐럿(^)은 이전 버전과 호환되는 새로운 기능도 제공합니다.
^
1입니다.[임의]입니다. ( 버전 any] (단조 버전 포함)
~
11.2는 .[ 적용any](패치 적용)입니다.
semver가 npm에 어떻게 적용되는지에 대한 이 블로그 게시물은 좋은 읽을거리입니다.
그리고 그들이 그것을 semver 표준과 일치시키기 위해 무엇을 하고 있는지.
http://blog.npmjs.org/post/98131109725/://blog.npmjs.org/post/98131109725/npm-2-0-0
은 "breaked"로될 수 . 왜냐하면 모자 매칭은 "breaked"로 업데이트되지 입니다.^0.1.2
0.2.0
는 소트웨어사때용될새게를 합니다.0.x.y
숫자("" "" " " " " "와 같은 숫자입니다.")와합니다.y
로 한 이것은 고의로 한 것입니다.그 이유는 소프트웨어가 진화하는 동안 API가 빠르게 변하기 때문입니다. 하루는 이러한 방법을 사용하고 다른 날은 이러한 방법을 사용하고 이전의 방법은 사라집니다. 예: " 러리를이사예있사코는용해드싶버전주지요않은경우고하독를라의자미이고: "1.0.0
->2.0.0
->3.0.0
소프트웨어가 최종적으로 100% 완성되고 전체 기능이 제공될 때까지 버전과 유사합니다.11.0.0
그리고 그것은 별로 의미가 없어 보이고 실제로는 혼란스러워 보입니다.반면에, 만약 당신이 사용한다면,0.1.x
->0.2.x
->0.3.x
되고 전체 이 될 까지 버전으로 . 소 웨 트 어 가 최 고 버 로 버 출 때 지 전 까 될 시 으 전 한 featured 완 전 프 되 완 료1.0.0
이는 "이 릴리스는 장기 서비스 버전이며, 이 버전의 라이브러리를 프로덕션 코드에서 진행하여 사용할 수 있으며, 작가는 내일이나 다음 달에 모든 것을 변경하지 않을 것이며 패키지를 포기하지 않을 것입니다."라는 의미입니다.
규칙은 다음과 같습니다.0.x.y
변경될 때 은 API를 가지고 있음).^0.1.0
얻을 수 없는0.2.0
업데이트하면 코드가 깨지지 않습니다.그런 다음 소프트웨어가 성숙해지면 다음과 같이 릴리스합니다.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.
^
특정 버전 이상의 모든 항목을 동일한 주 범위에 포함합니다.
~
특정 버전보다 큰 모든 항목을 동일한 부 범위에 포함합니다.
예를 들어 허용되는 버전 범위를 최대 1.0.4까지 지정하려면 다음 구문을 사용합니다.
- 패치 릴리스: 1.0 또는 1.0.x 또는 ~1.0.4
- 보조 릴리스: 1 또는 1.x 또는 ^1.0.4
- 주요 릴리스: * 또는 x
의미론적 버전 관리 구문에 대한 자세한 내용은 npm semver 계산기를 참조하십시오.
틸데(~)
주 버전이 고정되어 있고 부 버전이 고정되어 있으며 빌드 번호와 일치합니다.
"express": "~4.13.3"
~4.13.3
4x에 합니다. 서 x는 아무 것이나 즉, 4.13.x를입니다. 여기서 x는 아무 것이나 됩니다.
캐럿(^)
주 버전이 고정되어 있고 부 버전과 일치하며 빌드 번호와 일치합니다.
"supertest": "^3.0.0"
^3.0.0
x.x를 합니다. 것이나 즉, 3.x.x 파일입니다. 여기서 x는 아무 것이나 됩니다.
하나의 라이너 설명
표준 버전 관리 시스템은 major.minor입니다.빌드(예: 2.4.1)
npm은 이러한 문자를 기반으로 특정 패키지의 버전을 확인하고 수정합니다.
: 주 버전은 고정, 부 버전은 고정, 모든 빌드 번호와 일치
예: ~2.4.1은 2.4.x를 확인한다는 의미입니다. 여기서 x는 아무 것이나 됩니다.
: major 버전이 고정되어 있고, major 버전과 일치하며, 빌드 번호와 일치합니다.
예: ^2.4.1은 2.x.x를 확인한다는 의미입니다. 여기서 x는 아무 것이나 됩니다.
타일드 - 부 버전과 일치합니다. 1.4.2가 있는 패키지를 설치한 경우 설치 후 버전 1.4.3 및 1.4.4도 패키지에 포함된 경우 사용할 수 있습니다.json은 ~1.4.2로 사용되며 업그레이드 후 프로젝트에 npm 설치가 프로젝트에 1.4.4를 설치합니다.그러나 해당 패키지에 대해 1.5.0을 사용할 수 있으며 ~에 의해 설치되지 않습니다.그것은 마이너 버전이라고 불립니다.
캐럿 ^은 주 버전과 일치합니다. 1.4.2 패키지가 프로젝트에 설치되어 있고 설치 1.5.0이 릴리스된 후 ^이 주 버전을 설치합니다.^1.4.2가 있는 경우 2.1.0을 설치할 수 없습니다.
설치할 때마다 패키지 버전을 변경하지 않으려면 "1.4"와 같은 특수 문자 없이 고정 버전을 사용합니다.2"
최신 버전 * 최신 버전을 설치하려면 패키지 이름 앞에만 *를 사용합니다.
package.json에서 타일드(~)와 캐럿(^)을 보았을 것입니다.그들 사이의 차이점은 무엇입니까?
dpm install moment --save를 실행하면 패키지에 항목이 저장됩니다.캐럿(^) 접두사가 있는 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/care-and-tilde-in-package-json-57f1cbbe347b
semver는 점에 의해 깨지는 3개의 주요한 부분으로 분리됩니다.
major.minor.patch
1.0.0
이러한 서로 다른 메이저, 마이너 및 패치는 서로 다른 릴리스를 식별하는 데 사용됩니다.tide(~)와 carlet(^)은 패키지 버전 지정에 사용할 부 버전과 패치 버전을 식별하는 데 사용됩니다.
~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
이 질문과 관련하여 버전에 대한 Composer 설명서를 검토할 수 있지만, 간단히 다음과 같습니다.
- 타일드 버전 범위(~) - ~1.2.3은 >=1.2.3 <1.3.0과 동일합니다.
- 캐럿 버전 범위(^) - ~1.2.3은 >=1.2.3 <2.0.0과 동일합니다.
따라서 Tilde를 사용하면 패치는 자동으로 업데이트되지만 마이너 버전과 메이저 버전은 업데이트되지 않습니다.그러나 캐럿을 사용하면 패치 및 보조 버전이 제공되지만 주요(변경 사항 중단) 버전은 제공되지 않습니다.
Tilde Version은 "안전한" 접근 방식으로 간주되지만 신뢰할 수 있는 종속성(잘 유지 관리된 라이브러리)을 사용하는 경우 Carlet Version에 문제가 없어야 합니다.
Composer 설치와 Composer 업데이트 간의 차이점에 대해 이 스택 오버플로 게시물을 검토해야 합니다.
답 자체가 아니라 간과된 듯한 관측입니다.
캐럿 범위에 대한 설명:
참조: https://github.com/npm/node-semver#caret-ranges-123-025-004
[major, minor, patch] 튜플의 맨 왼쪽 숫자를 수정하지 않는 변경을 허용합니다.
▁that라는 뜻입니다.^10.2.3
항목 냥10.2.3 <= v < 20.0.0
그런 뜻은 아닌 것 같아요.버전 11.x.x에서 19.x.x까지 풀링하면 코드가 손상됩니다.
내 생각에 그들은left most non-zero number field
SemVer에는 숫자 필드가 한 자리여야 하는 항목이 없습니다.
버전 번호는 구문으로 각 섹션을 다른 의미로 지정합니다.구문은 점으로 구분된 세 개의 섹션으로 나뉩니다.
major.slajor.slajor 1.
주, 부 및 패치는 패키지의 서로 다른 릴리스를 나타냅니다.
npm은 타일드(~)와 캐럿(^)을 사용하여 각각 사용할 패치와 부 버전을 지정합니다.
따라서 ~1.0.2가 표시되면 버전 1.0.2 또는 1.0.4와 같은 최신 패치 버전을 설치해야 합니다.^1.0.2가 표시되면 버전 1.0.2 또는 1.1.0과 같은 최신 부 버전 또는 패치 버전을 설치해야 합니다.
데~
버전 합니다.
럿^
버전 합니다.
들어 이 예들어패버전이지인 4.5.2
업데이트 시:
~4.5.2
버전의 를 설치합니다.4.5.x version (MINOR VERSION)
^4.5.2
버전의 를 설치합니다.4.x.x version (MAJOR VERSION)
예를 들어, ~1.8.0의 경우 모든 1.8.x 버전과 일치하지만 1.9.0은 손실됩니다(기본 동작).
예를 들어 ^1.8.0의 경우 최신 주요 버전(첫 번째 문제)으로 업데이트됩니다.1.9.0을 포함하지만 버전 2.0.0과는 거리를 유지하는 모든 1.x.x 릴리스
예 3.9.2:
Symbol Dependency Versions Changes
tilde (~) ~3.9.2 3.9.* -bug fix
caret (^) ^3.9.2 3.*.* -backwards compatible new functionality
-old functionality deprecated, but operational
-large internal refactor
-bug fix
언급URL : https://stackoverflow.com/questions/22343224/whats-the-difference-between-tilde-and-caret-in-package-json
'programing' 카테고리의 다른 글
Windows 사용자 표시 이름 가져오기 (0) | 2023.05.14 |
---|---|
SQL Server 하위 쿼리가 1개 이상의 값을 반환했습니다.하위 쿼리가 =, !=, <, <=, >, >=를 따르는 경우에는 허용되지 않습니다. (0) | 2023.05.14 |
선택 상자의 선택 옵션 설정 (0) | 2023.05.14 |
시스템과 함께 HTTP POST를 보내는 중입니다.Net.WebClient (0) | 2023.05.14 |
Azure 가용성 세트 및 척도 세트의 차이 (0) | 2023.05.14 |