Etc

TIL | 패키지 잠금파일

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