Day 60 · 4/5
🌿 중급 개발도구

package-lock.json이 뭔가요?

쉽게 이해하기

레시피에 '소금 약간'이 아니라 '소금 3g'처럼 정확한 양을 적어두면 누가 만들어도 같은 맛이 나잖아요. package-lock.json도 패키지 버전을 정확하게 기록해서 누가 설치해도 같은 환경이 만들어지게 해줘요.

핵심 정리

npm으로 설치한 패키지들의 정확한 버전을 기록해서 누가 설치해도 같은 버전이 설치되게 해주는 파일이에요.

자세히 알아보기

package-lock.json은 npm install을 실행할 때 자동으로 생성되는 파일로, 설치된 모든 패키지의 정확한 버전과 의존성 트리를 기록해요. package.json에는 ^1.2.3 같은 범위로 버전이 적혀있지만, package-lock.json에는 1.2.5처럼 정확한 버전이 적혀있어요. 실무에서는 팀원들이 모두 같은 버전의 패키지를 쓰게 하려고 package-lock.json을 Git에 커밋해요. 예를 들어 내 컴퓨터에서는 react 18.2.0이 설치됐는데 동료 컴퓨터에서는 18.3.0이 설치되면 미묘한 버그가 생길 수 있어요. package-lock.json이 있으면 npm install만 하면 모두 똑같은 버전이 설치돼요. npm ci 명령어는 package-lock.json을 정확히 따라서 설치하기 때문에 CI/CD 환경에서 많이 써요. package.json을 수정하고 npm install을 하면 package-lock.json도 자동으로 업데이트되니까 둘 다 함께 커밋해야 해요. 가끔 merge conflict가 나는데, 그럴 땐 package-lock.json을 지우고 npm install을 다시 실행하면 깔끔하게 해결돼요. Yarn을 쓴다면 yarn.lock, pnpm을 쓴다면 pnpm-lock.yaml이 같은 역할을 해요.