React

[NPM] package-lock.json 파일이 깃 레포지토리에 있어야 하는 이유

bomoto 2022. 10. 14. 11:25

package-lock.json파일이 깃 저장소에 항상 올라가 있어야 한다는 것은 알고 있었는데 이 파일이 왜 저장소에 있어야만 하냐는 이유를 물어보면 명확하게 설명을 할 수 없을 것 같아서 npm 공식 문서에 잘 정리되어 있길래 정리해보았다.

 

 

 

package-lock.json 파일은?

npm이 node_module를 수정하면 자동으로 반영되는 파일이다.

그래서 npm install을 하면 자동으로 생성되고 패키지 업데이트가 있었다면 파일 내용이 수정되어있는 걸 확인할 수 있다.

 

이 파일에는 npm을 통해 설치한 패키지들의 상세 내용이 기록되어있다.

npm install을 하면 프로젝트 설정 파일인 package.json에 명시한 모듈을 설치하게 되고 package-lock.json 생성되며(node_modules 최초 설치일 때) 설치한 모듈의 버전, 의존성 정보 등이 기록된다.

 

 

 

 

왜 필요할까?

프로젝트를 빌드할 때 코드 실행에 필요한 모듈이 있는지 없는지, 또 버전은 어떻게 되는지 등이 중요하기 때문에 내가 개발한 환경의 node_modules파일 상태를 기록할 필요성이 생긴다.

하지만 node_modules파일은 용량이 너무 커서 레포지토리에 커밋하기 어렵기 때문에 .gitignore에서 해당 폴더를 무시하게 설정한다.

그래서 package-lock.json에 내가 작업한 환경에서 정확히 어떤 패키지를 사용했는지 한 파일로 관리하는 것이다.

 

이렇게 해서 얻을 수 있는 이점은 몇 가지가 있다.

  • node_modules 폴더 자체를 커밋하지 않아도 깃 히스토리에서 하나의 파일로 관리할 수 있다.
  • 협업 시 서로 동일한 개발 환경을 유지할 수 있다.
  • 한 파일로 관리하기 때문에 diff로 변경 사항을 확인하기 쉬워진다.
  • npm 설치 시 이미 설치된 패키지는 건너뛸 수 있게 되어 설치 프로세스가 간단해진다.

 

 

 

 

추가로, 패키지 매니저로 npm이 아닌 yarn을 사용하는 경우는 yarn.lock파일이 생성되는데 package-lock.json과 함께 저장소에 커밋되지 않도록 .gitignore에 잘 추가해줘야 한다.