Npm의 유의적 버전 표기, 패키지 잠금파일(package-lock.json, yarn.lock)
버전의 범위
잠금파일을 알아보기 전, npm이 모듈의 버전을 관리하는 방식을 먼저 알아보자
"dependencies": {
"react": "^17.0.2",
},
위 예시는 npm을 통해 설치한 react의 버전이 17.0.2이라는 것이다. 이때 npm은 버전을 관리하기 위해 유의적 버전(Sementic Version) 규칙 아래 패키지 버전을 관리한다.
유의적 버전은 주(Major), 부(Minor), 수(Patch) 세 가지 숫자를 조합해서 버전을 관리하는 방법이다. 위 리액트 버전을 예시로 들 경우 주는 17, 부는 0, 수는 0이다. 각각의 버전을 변경하는 기준은 다음과 같다.
- 주 버전(Major Version): 기존 버전과 호환되지 않게 변경한 경우
- 부 버전(Minor version): 기존 버전과 호환되면서 기능이 추가된 경우
- 수 버전(Patch version): 기존 버전과 호환되면서 버그를 수정한 경우
여기서 ^
은 캐럿으로, 정식버전에서의 부(Minor)버전과 수(Patch)버전을 변경한다. 즉 기존 버전과 호환이되면서 기능 추가 혹은 버그가 수정 된경우를 뜻한다.
"dependencies": {
"react": "^17.0.2", // 17.0.2 이상 18.0.0 미만
},
패키지 잠금 파일??
잠금 파일은, 설치 시점에 상관없이 모두 동일한 패키지를 설치할 수 있도록 도와주는 파일이다. (이를 패키지 잠금 기능이라고 한다.) 예를 들어 package.json
내부에 react.: ^17.0.1
가 있을 경우, 이는 지속적으로 동일한 패키지 설치가 되는것이 아닌 17.0.1 이상 ~ 18 미만의 패키지가 자유롭게 설치될 수 있기 때문에 로컬 환경별 동작의 이상이 생길 수 있다. 따라서 npm
or yarn
을 사용할 시 package.json
를 기준으로 패키지 설치 시점에 따른 잠금 파일을 자동으로 생성해준다.
결론적으로는 잠금파일로 인해 항상 동일한 버전의 패키지를 설치할 수 있게 된다.
Reference
'Etc' 카테고리의 다른 글
리액트와 함께하는 테스트 격리(번역) (0) | 2023.04.17 |
---|---|
TIL | Reflow, Repaint (0) | 2022.08.28 |
TIL | GraphQL Subscriptions (0) | 2022.03.13 |
TIL | Tailwind CSS (0) | 2022.03.10 |
TIL | Webstorm IDE Setting Share (0) | 2022.03.01 |