본문 바로가기

기타/Node

package.json과 package-lock.json

package.json 이란?

package.json은 현재 프로젝트에 대한 설정 정보에 관한 문서이다.

개발자가 배포한 패키지에 대해, 다른 사람들이 관리하고 설치하기 쉽게 하기 위한 문서이다. 

 

npm에 패키지를 배포하고, npm registory에 올리기 위해서 반드시 필요한 문서 파일이다.

  • 자신의 프로젝트가 의존하는 패키지의 리스트
  • 자신의 프로젝트의 버전을 명시
  • 다른 환경에서도 빌드를 재생 가능하게 만들어, 다른 개발자가 쉽게 사용할 수 있도록 한다.

package-lock.json이 필요한 이유?

package-lock.json은 모든 개발자에게 모듈 의존성에 관해 동일한 개발 환경을 세팅해주기 위해 만들어진 프로젝트 설정 문서이다. 

package-lock.json은 그래서 npm에 의해서 프로젝트의 node_modules나 package.json이 수정되는 경우 생성되거나 업데이트되며 당시 의존성에 대한 정보를 모두 가지고 있다.

 

package-lock.json이 따로 생기게 된 이유는, package.json에서 모듈 의존성 선언을 특정 버전이 아닌 version range(버전 범위)로 사용되기 때문이다. 아래 package.json을 보면 모듈 의존성을 Caret Ranges(^)로 표시된 것을 알 수 있다.

 

버전은 major, minor, patch 순으로 구성되어 있다. 2020.2.513을 예로 들면 major는 2020, minor은 2, patch는 513 이다. 

이 package.json으로 npm install을 실행하면 현재는 2020.2.513이 설치되지만, express의 새로운 minor, patch가 publish 되면 동일한 package.json 파일로 npm install을 실행해도 버전의 minor나 patch가 변경된  2020.3.513이나 2020.2.514 같은 업데트된 버전이 설치된다. 즉, 개발자마다 설치된 패키지 버전과 의존성 트리가 달라질 수 있다!

 

그래서, A라는 개발자가 package.json만 커밋하고, B라는 개발자가 pull 받아 npm install할 때, B에는 다른 버전의 모듈이 설치되어, A에서 되던 기능이 B에서는 오류가 날 수 있다.

 

package-lock.json은 node_modules나 package.json이 수정되는 경우 자동으로 특정 버전으로 업데이트 되어, 모듈 설치 당시의 의존성에 대한 정보를 모두 가지고 있다.

아래를 보면 version이 caret range 없이 특정 버전으로 2020.2.513으로 적혀있는 것을 알 수 있다.

 

package-lock.json이 있을 경우, npm install 할 때, package.json을 사용하여 node_modules를 바로 생성하지 않고 package-lock.json을 사용하여 node-modules를 생성한다.

 

따라서 모든 개발자가 프로젝트에 관해 동일한 모듈 버전을 사용하도록, 생성된 package-lock.json파일은 소스 저장소에 커밋해야 한다.

참고 자료

https://docs.npmjs.com/cli/v9/configuring-npm/package-json

 

package.json | npm Docs

Specifics of npm's package.json handling

docs.npmjs.com

https://docs.npmjs.com/cli/v9/configuring-npm/package-lock-json

 

package-lock.json | npm Docs

A manifestation of the manifest

docs.npmjs.com

https://1000hg.tistory.com/47

 

2. [Nodejs] package.json과 package-lock.json은 무엇일까?

Nodejs를 사용할 때 자주 볼 수 있는 파일이 있습니다. package.json과 package-lock.json입니다. 자주 보고, 자주 건드려 보지만 둘의 차이와 사용 목적을 잘 모르는 경우가 있습니다. 이번 포스팅에서는

1000hg.tistory.com

https://hyunjun19.github.io/2018/03/23/package-lock-why-need/

 

package-lock.json은 왜 필요할까?

package-lock.json은 왜 필요할까? 2018-03-23 package-lock.json은 왜 필요할까? 어느 날 부터 인가 npm을 사용하면 package-lock.json 파일이 같이 생기기 시작했습니다. 이 파일의 정체가 궁금했지만 바쁘다는 핑

hyunjun19.github.io

 

'기타 > Node' 카테고리의 다른 글

package.json의 주요 구조  (0) 2022.11.27