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에 잘 추가해줘야 한다.
'React' 카테고리의 다른 글
[React] CRA로 생성한 리액트 환경변수가 development, production를 제외하고 적용되지 않을 때 (0) | 2023.01.18 |
---|---|
[React/CSS] 리액트 줄 바꿈: 자바스크립트 줄 바꿈(\n) 안됨 (0) | 2022.11.16 |
bebal 에러: "loose" warning for @babel/plugin-proposal-private-property-in-object (0) | 2022.10.12 |
[React] CRA없이 프로젝트 세팅(Babel, Webpack, Polyfill) #2: Webpack과 Polyfill (0) | 2022.04.29 |
[React] CRA없이 프로젝트 세팅(Babel, Webpack, Polyfill) #1: Babel (0) | 2022.04.29 |