본문 바로가기
매일 해내는 개발/Develog

패키지 의존성 관리: package.json, package-lock.json과 유의적 버전

by 해야지 2023. 10. 10.
반응형



1.  유의적 버전

패키지의 버전을 숫자로 관리하는 방법

[Major].[Minor].[Patch]-[label]

ex: 1.2.3-beta

1) Major : 이전 버전과 호환이 불가능할 때 숫자를 하나 증가한다.
Major 버전이 바뀐 패키지를 사용하고자 한다면 반드시 하위 호환성이 깨진 기능(breaking change) 목록을 확인하고 이전 기능을 사용하는 코드를 수정해야한다.

2) Minor: 기능이 추가되는 경우 숫자를 하나 증가시킨다.
 기능이 추가되었다고 해서 이전 버전의 하위 호환성을 깨트리지는 않는다.

3) Patch: 버그 수정 패치를 적용할 때 사용

4) label: 선택 사항으로 pre, alpha, beta와 같이 버전에 대한 부가 설명을 붙이고자 할 때 문자열로 작성한다.

유의적 버전을 사용할 때 완전히 동일한 버전만을 정의해야하는 것은 아니다. 규칙을 통해 의존성이 깨지지 않는 다른 버전을 설치할 수 있다.

<규칙>

  • ver: 완전히 일치하는 버전
  • =ver: 완전히 일치하는 버전
  • >ver: 큰 버전
  • >=ver: 크거나 같은 버전
  • <ver: 작은 버전
  • <=ver: 작거나 같은 버전
  • ~ver: 버전 범위(지정한 마지막 자리 내 범위)
    • ~1.0, 1.0.x: 1.0.0이상 1.1.0 미만의 버전
  • ^ver: SemVer 규약을 따른다는 가정에서 동작하는 규칙
    • ^1.0.2: 1.0.2 이상 2.0미만의 버전
    • ^1.0: 1.0.0 이상 2.0 미만의 버전
    • ^1: 1.0.0 이상 2.0 미만의 버전

2. package.json

  • 애플리케이션이 필요로 하는 패키지 목록을 나열
  • 각 패키지는 시맨틱 버저닝 규칙으로 필요한 버전을 기술
  • 다른 개발자와 같은 빌드 환경을 구성할 수 있기 때문에 버전이 달라 발생하는 문제를 예방

3. package-lock.json

프로젝트 루트 디렉토리에서 npm install 명령을 수행하면 nome_module 디렉토리와 package-lock.json 파일이 생성된다.
package-lock.json 파일은 node-modules나 package.json파일의 내용이 바뀌면 npm install 명령을 수행할 때 자동으로 수정된다.

node-modules는 프로젝트가 필요로 하는 패키지들이 실제로 설치되는 장소이다.
애플리케이션은 런타임에 여기에 설치된 패키지들을 참조한다.

package-lock.json 파일은 package.json에 선언된 패키지들이 설치될 때의 정확한 버전과 서로 간의 의존성을 표현한다.
팀원들 간에 정확한 개발 환경을 공유할 수 있다. 따라서 같은 패키지 설치를 위해 node_modules 폴더를 통째로 깃 등의 원격 저장소에 공유하지 않아도 되는 것.

만약 소스 코드 내에 package-lock.json 파일이 이미 존재하면 npm install 명령을 수행할 때 이 파일을 기준으로 패키지들을 설치하게 된다. 따라서 package-lock.json 파일을 원격 저장소에서 관리해야한다.

반응형

댓글