gitignore 안에 왜 packge-lock.json이 있는가? 에 대한 질문을 받았다.
해당 이유에 대해 설명하기 이전에
gitignore 파일이 무엇인가를 검색해보자.
.gitigonre 파일이란?
사용자가 원하지 않는 파일들 즉, Git 버전 관리에서 제외할 목록을 지정하는 파일
git으로 프로젝트를 관리하다 보면 git에는 올려서는 안 되거나 불필요한 파일들이 있다.
gitigonre를 사용하면 commit 과정에서 일일히 제외하지 않고도 한번에 무시할 파일들을 제외할 수 있다고 한다.
package.json과 node_modeule이란?
node.js 를 사용하면 node_module이 필요하고 이건 용량을 엄청 크게 차지하게 된다.
그리고 node_module을 수정하면 npm이 자동으로 package-josn에 수정 된 내용을 기록하게 된다.
npm istall 을 하게 되면 package.json에 명시한 모듈을 설치하게 되고 이 때 package-lock.json 이 생성되며 (node_modules 최초 설치일 때) 설치한 모듈의 버전, 의존성 정보 등이 기록되게 된다.
중요!
프로젝트를 빌드할 때 코드 실행에 필요한 모듈이 있는지 없는지, 또 버전은 어떻게 되는지 등이 중요하기 때문에 내가 개발한 환경의 node_modules 파일 상태를 기록할 필요성이 생긴다.
하지만 ! node_modules 파일은 용량이 엄청 크다. 실제로 압축해보면 node_modules 파일 압축하는데 엄청 오랜 시간이 발생한다. 그렇기에 커밋이 어려워진다.
그래서 gitignore에서 해당 폴더를 무시하도록 설정한다.
# Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* node_modules package-lock.json bun.lockb .DS_Store dist dist-ssr coverage
실제로 우리 회사에도 이렇게 무시하는 코드를 작성해 놓은 것을 확인할 수 있었다.
그리고 lock 파일은 내가 작성한 파일을 기준으로 작성되니깐 굳이 필요하지 않기에 이것 또한 제외한다. 그렇게 해서 협업 시 동일한 개발 환경을 유지할 수 있다.
추가 중요한 점!
package-lock이 있을 경우 → 동일한 환경으로 설치 된다.
없으면 → 환경이 다르게 설치된다. 의존성 트리의 일부 버전이 다르게 설치된다.
김 주임연구원님
→ package.json / package-lock.json 파일을 올린다. 그리고 윤 연구원에게 프로젝트를 git에서 clone 받으라고 전달한다.
윤 연구원 그걸 clone을 받는다. 의존성 트리가 동일하게 설치 된다.
하지만 package-lock.json이 없을 경우는 의존성 트리에 대한 정보가 없기 때문에 문제가 생기게 되어 윤 연구원은 뭣모르고 뭔지 모르는 에러에 야근을한다.
자세한 이유를 알아보자!
package.json
파일로 npm install
을 실행하면 현재는 4.16.3 버전이 설치되지만 express
의 새로운 minor, patch가 publish 되면 동일한 package.json
파일로 npm install
을 실행해도 4.17.3, 이나 4.16.4 같은 업데이트된 버전이 설치됩니다. 물론 대부분의 경우에는 문제가 없지만 간혹 업데이트된 버전이 오류를 발생시키는 경우가 있습니다.package-lock.json
파일은 의존성 트리에 대한 정보를 가지고 있으며 package-lock.json
파일이 작성된 시점의 의존성 트리가 다시 생성될 수 있도록 보장합니다.그래서 package-lock.json이 필요한 것 입니다.
Share article