package-lock.json is automatically generated for any operations where npm modifies either the node_modules tree, or package.json.
npm 공식 문서에는 위와 같이 나와있다. 즉, node-modules 트리나 package.json 수정될 때, 자동적으로 생성되는 것이다.
위에서 제시된 것에서 알 수 있듯 크게 1) package.json의 내용이 다르거나 2) package.json은 같아도 node-modules가 다른 경우이다.
이를 이해하기 위해 package-lock.json이 생성되는 시점인 npm install의 과정을 알아보자.
"npm install" -> package.json을 바탕으로 node-modules 폴더 생성 및 패키지 설치 -> node-modules 폴더의 정보를 package-lock.json에 담기
2) package.json은 같아도 node-modules가 다른 경우는 크게 3가지가 있다.
① npm 버전이 다른 경우
② 의존성을 가진 패키지의 버전이 업그레이드 되는 경우
③ 의존성을 가진 패키지가 의존하는 패키지의 버전이 업그레이드 되는 경우
!!! 협업을 하기 전, npm 버전을 미리 통일하자 !!!
충돌을 방지하기 위해 이 파일을 git ignore하면 되지 않을까 생각했다. 하지만,
이 파일은 팀에게 정확한 디펜던시 버전을 알려주고, 중복된 라이브러리를 검사해주는 등의 역할을 하기 때문에 올려야 한다.
충돌을 해결하기 위해 이를 삭제하고, 다시 npm install을 하는 방식을 활용했었다. 하지만 이는
디펜던시 트리의 일부분을 의도치 않게 바꿀 수 있기 때문에 삭제하는 방식보다는 위에서 제시한 해결 방법을 활용해야 한다.