본문 바로가기

Javscript

[JS] package.json, package-lock.json 이 뭐에요 ? (feat, ^(caret)와 ~(tilde))

반응형

 

package.json

현재 폴더(프로젝트)에 관한 정보와 패키지 매니저(npm, yarn)을 통해 설치된 라이브러리, 모듈들의 의존성을 관리하는 json파일이다.

 

{
  "name": "coding-hyeok",
  "version": "0.1.0",
  "private": true,
  // ~~
  "dependencies": {
	"열코": "^1.2.3"
  },
  "devDependencies": {
    "혁코": "~1.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
  },
  "proxy": "http://localhost:4000"
}

 

위는 예시이다. 리액트를 사용하는 독자라면 익숙한 것일테다.

 

name, version, private, proxy 등은 프로젝트에 관한 정보이다.

 

dependencies는 런타임 환경에서 필요한 모듈들에 대한 버전 의존성이다.

 

devDependencies는 dev환경에서 필요한 모듈들에 대한 버전 의존성이다.

 

그럼 1.0.0 < 이건 무슨 뜻이냐 ?!

 

Major  - 이전 버전보다 큰 기능 향상을 한 경우 Major 버전을 올린다.
 - 기능이 크게 변경되었기에, 이전 버전과 호환이 불가하다.
Minor  - 새로운 기능이 추가된 경우 Minor 버전을 올린다.
 - 하위 버전과 호환이 가능하다.
Patch  - 버그가 수정된 경우 Patch 버전을 올린다.
 - 하위 버전과 호환이 가능하다.

 

위와 같은 뜻을 가진다.

 

그렇다면 버전 앞에 붙는 ^(caret)와 ~(tilde)의 의미는 무엇일까 ?

 

^ caret

Major 버전이 일치하는 경우에는 Minor와 Patch 버전을 자유롭게 업데이트할 수 있다는 것을 의미한다.

예를 들어 위와 같이 ^1.2.3이면 1.3.3, 1.9.9 버전도 사용이 가능하다.

 

~ tilde

Major 버전은 일치하고 Minor 버전도 특정 번호로 고정되며, Patch 버전만 특정 번호 이상이어야한다는 의미이다.

예를 들어 위와 같이 ~1.1.1이면 1.1.2, 1.1.9 버전이 사용이 가능하고, 1.2.1은 사용이 불가능하다.

 

 

package-lock.json

위 설명을 보면 의문이 하나 생길 것이다.

예를 들어, 열코: "^1.2.3"로 돼있는 package.json으로 npm install을 하면

A가 npm install을 했을 때는 1.2.3버전이 다운받아졌다.

그런데, 몇개월 후 B가 npm install을 했을 때 열코 라이브러리가 업데이트 되어서 1.2.9버전이 다운받아진 것이다.

그럼 A와 B는 다른 버전의 라이브러리를 사용할 것이다. 문제가 없을 수도 있겠지만 있을 수도 있다.

이를 방지하기 위해 package-lock.json으로 정확한 버전과 하위 모듈들에 대한 버전들을 정의해서 이를 방지한다.

 

package-lock.json의 기능은 아래와 같다.

 

1. 정확한 의존성 버전 관리

  • 프로젝트에 설치된 각 패키지의 정확한 버전을 기록. 이는 프로젝트를 공유하거나 새로운 개발 환경에서 프로젝트를 설치할 때에 정확한 의존성 버전을 보장한다.

2. 의존성 트리의 재현 가능성

  • 프로젝트에서 사용중인 패키지들 간의 의존성 트리를 포함하고 있따. 이는 프로젝트를 다른 환경으로 이전하거나 다른 개발자가 프로젝트를 복제할 때에 정확한 의존성 트리를 재현할 수 있게 해준다.

3. 빌드 시에 일관성 유지

  • 프로젝트에 패키지를 추가하거나 업데이트 할때, 패키지 설치 시의 정확한 버전을 유지하면서 패키지를 설치한다. 이를 통해 일관성있는 빌드를 보장할 수 있다.

4. 보안 및 신뢰성

  • 패키지의 해시값을 기록하여 패키지의 정확한 상태를 확인하고 변경 여부를 확인하는 데에 도움을 준다.

 

반응형