Node.js 에서 package.json 의 라 이브 러 리 버 전 번호(~와^)
3645 단어 Nodepackage.json버 전 번호
요즘 자꾸 문제 가 생 겨 서 현지에서 잘 지내 고 있 는데 온라인 상에 서 문제 가 생 겼 어 요.현지에서 도 계속 재현 이 안 돼 서 나중에 nodemodules 디 렉 터 리 가 삭 제 된 후에 다시 설치 하면 로 컬 에서 이 문 제 를 재현 할 수 있 습 니 다.git history 를 볼 수 있 습 니 다.package.json 의 버 전 번 호 를 수정 하 는 사람 이 없어 서 package.json 의 버 전 번 호 를 진지 하 게 알 아 보 았 습 니 다.
~과^의 차이
"babel-loader": "^7.1.1",
"body-parser": "~1.15.2"
npm install--save xxx,사용 을 우선 고려 합 니 다^~버 전 번호 x.y.z 를 예 로 들 면
x:주 버 전 번호,호 환 되 지 않 는 API 수정 을 했 을 때
y:차 버 전 번호,아래로 호 환 되 는 기능 성 문 제 를 했 을 때
z:수정 번호,아래로 호 환 되 는 문제 복 구 를 했 을 때
~x.y.z,
Y 최신 버 전 으로 업 데 이 트 됩 니 다.예 를 들 어 body-parser
:~1.15.2,이 라 이브 러 리 는 1.15.z 의 최신 버 전 과 일치 합 니 다.1.16.0 이 나 오 면 자동 으로 업그레이드 되 지 않 습 니 다.^x.y.z
x 의 최신 버 전 으로 업 데 이 트 됩 니 다.예 를 들 어babel-loader
:^7.1.1,이 라 이브 러 리 는 7.y.z 의 최신 버 전 과 일치 합 니 다.8.1.1 이 나 오 면 자동 으로 업그레이드 되 지 않 습 니 다.'~'( ):
그 는 현재 minor version(즉 중간 에 있 는 숫자)의 최신 버 전 으로 업데이트 할 것 이다.우리 의 예 에서'exif-js':'~2.3.0'입 니 다.이 라 이브 러 리 는 2.3.x 로 업 데 이 트 된 최신 버 전과 일치 합 니 다.새로운 버 전이 2.4.0 이면 자동 으로 업그레이드 되 지 않 습 니 다.파도 기 호 는 npm 가 설치 되 었 을 때의 기본 기호 로 현재 삽입 기호 로 바 뀌 었 습 니 다.'^'( ):
이 기 호 는 매우 유연 해 보인다.그 는 현재 라 이브 러 리 의 버 전 을 현재 major version(즉 첫 번 째 숫자)의 최신 버 전 으로 업데이트 할 것 이다.우리 의 예 에서'vue':'^2.2.2'입 니 다.이 라 이브 러 리 는 2.x.x 의 최신 버 전과 일치 하지만 그 는 3.0.0 으로 자동 으로 업데이트 되 지 않 습 니 다.참고 가능npm 공식 설명
^1.2.3 := >=1.2.3 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.0.3 := >=0.0.3 <0.0.4
대부분의 경우 이러한 버 전 번호 규칙 에 따 른 의존 가방 은 문제 가 없 지만 npm 는 오픈 소스 의 세계 로 모든 것 이 이런 규칙 을 엄 격 히 따 르 는 것 이 아니 기 때문에 상기 문제 가 발생 할 수 있 습 니 다.
패키지 자물쇠 가 왜 필요 해?
다음 과 같은 몇 가지 가능 한 이유 가 있 습 니 다.어떤 경우 에는 package.json 은 모든 사람 이 자신의 컴퓨터 에서 실행 하 는 npm install 후 설치 하 는 의존 버 전이 똑 같 음 을 보장 할 수 없습니다.
1.package.json 에 기 록 된 의존 패키지 버 전이 버 전 범위 라면 npm i 를 실행 하면 이 패키지 가 최신 버 전 으로 업 데 이 트 됩 니 다.
2.고정 버 전의 가방(예 를 들 어 A 1.1.1)에 의존 하 더 라 도 의존 하 는 가방 A 는 다른 가방 B 에 의존 할 수 있 습 니 다.A 는 의존 하 는 것 을 설명 할 때 semser 이름 을 사용 할 수 있 습 니 다.예 를 들 어^1.2.3.가방 B release 가 새 버 전 을 사용 하면 가방 B 가 업데이트 버 전 으로 설 치 될 수 있 습 니 다.
3.다른 사람 이 사용 하 는 npm 프로그램의 버 전이 다르다
가방 에 의존 하 는 버 전이 일치 하지 않 으 면 개발 환경 과 생산 환경 제품 이 일치 하지 않 는 행 위 를 초래 할 수 있다.팀 별로 제품 환경 차이 가 생 길 수도 있 습 니 다.
어떻게 패키지 버 전이 일치 하지 않 는 상황 을 해결 합 니까?
1.npm 는 package-lock.json 파일 을 사용 하여 이 문 제 를 해결 합 니 다.
npm install 을 실행 하면 자동 으로 package.json 파일 이 생 성 됩 니 다.일반적인 설치,업데이트 등 을 실행 하면 package.json 의 npm 명령 을 수정 할 수 있 습 니 다.package-lock.json 파일 을 자동 으로 동기 화 합 니 다.
npm install xxx
npm rm xxx
npm update xxx
2.npm 지원npm-shrinkwrap.json,package-lock.json 기능 과 똑 같 습 니 다.npm-shrinkwrap.json 을 만 들 기 위해 실행
npm shrinkwrap
이 명령 은 package-lock.json 파일 에 따라 기 존 npm-shrinkwrap.json 파일 을 새로 만 들 거나 덮어 씁 니 다.이 명령 은 현재 있 거나 있 는 package-lock.json 파일 보다 파일 을 만 들 고 업데이트 합 니 다.3.원사 사용
Yrn 을 사용 하면 장점 이 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NestJs Guard하지만 가드는 ExcutionContext를 사용할 수 있기 때문에 다음에 어떠한 라우트 핸들러가 실행되는지 정확하게 알 수 있다. ExecutionContext는 ArgumentsHost를 상속 받았기 때문에 각 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.