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은 매우 중요하다