5.package-lock.json
package-lock.json을 .gitignore에 포함시켜야할까?
문제 상황 !
금요일 퇴근하기 전까지만 해도 잘 돌아가던 Jenkins가 월요일 아침 개발계, 검증계에서 모두 빌드 에러를 냈다.
- 에러 로그에서 라이브러리들의 버전에 대해 문제를 말하는 것 같았음
- React의 버전, typescript의 버전, 다른 라이브러리들의 버전 등 버전 문제 의심
- 현재 우리의 서비스 리포지토리에는
package-lock.json
파일을 올리지 않고 있었는데 그로인해 Jenkins에서 정확한 버전을 알지 못해 빌드 에러를 내는 것으로 보여package-lock.json
을 리포지토리에 커밋해봄 - 문제 상황 해결
문제는 해결됐지만 왜? 라는 생각이 들었다.
package.json
만 있어도 이 프로젝트에서 어떤 버전이 필요한지 알 수 있지 않나?
아니었다.
- 참고 : https://medium.com/@han7096/package-lock-json-%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC-5652f90b734c
package-lock.json이란?
- npm을 사용하여
package.json
파일 또는node_modules
파일을 수정하면 자동으로 생서되는 파일 - 파일이 생성되는 시점의 의존성 트리에 대한 정보를 가짐
package.json
파일의 의존성 선언에는 version range가 사용되는데, 이는 특정 버전이 아닌 버전의 범위를 의미- 예를들어 보자면,
npm i express
를 실행하게 되면 package.json 파일에는 “^4.16.3”(Caret Ranges)로 버전 범위가 추가된다. 이package.json
를 기반으로npm i
을 실행하면 현재는 4.16.3 버전이 설치 되지만 새로이 express의 마이너 패치가 이루어진 버전이 퍼블리시 되어있다면 동일한package.json
파일로npm i
을 실행해도 4.16.4, 이나 4.17.1 같은 다른 버전이 설치될 수 있는 것이다.
(위 블로그 글 발췌) package-lock.json
파일은 의존성 트리에 대한 정보를 가지고 있으며, 작성된 시점의 의존성 트리가 다시 생성될 수 있도록 보장package-lock.json
파일은node_modules
없이 배포하는 경우 반드시 필요
따라서 간혹 업데이트된 버전이 오류를 발생시키는 경우가 있기 때문에 안정성을 위해
package-lock.json
은 매우 중요하다