package-lock.json
?회사 프로젝트를 본격적으로 시작하기 위해, upstream
에서 fork 한 내 origin에서 git clone
을 하고 평소와 마찬가지로 npm install
을 했는데 익숙하지 못한 변경내역이 발생했다.
package-lock.json
파일은 보통 패키지 잠금 파일로 불리는데, 이 파일에는 프로젝트에 패키지에 최초로 추가될 당시에 정확히 어떤 버전이 설치가 되었는지 기록된다. 그리고 npm install
을 통해 node_modules
를 설치하면 npm registry
에 등록되어 있는 최신 버전의 패키지를 설치하는 것이 아니라 잠금파일에 기록되어 있는 버전으로 설치된다. 이것을 통해 프로젝트 협업 시, 각각의 개발자가 동일한 버전의 패키지를 설치할 수 있게 되는 것이다. 그리고 package-lock.json
은 새로운 패키지가 갱신, 제거할때마다 package.json
파일과 동기된다.
문제는 npm install
을 했을 때, package-lock.json
파일만 변경 내역으로 인식하고 있다는 것이다. 이 문제의 원인은 많은 이유가 있을 수 있겠지만, 종합해보면 package.json
파일과 package-lock.json
파일이 서로 동기되어 있지 않기 때문이다. (package.json 파일을 직접 수정한다거나)
그래서 내가 clone
후 npm install
을 했을 때 동기되어 있지 않던 두개의 파일이 동기화가 되면서 package-lock.json
파일만 업데이트 되는 것이다. package-lock.json
은 package.json
파일을 기준으로 업데이트 되기 때문이다.
근복적인 문제해결 방법은 두개의 파일을 동기화시키는 것이다. 다만, 그 동기화 작업이 당장 어렵다면, git ci
를 통해서 node_modules
를 설치하는 방법도 있다.
git ci
는 Lock 파일을 변경하고 패키지를 설치하는 대신 에러를 내고 작업을 중단해버린다. 즉, 이 명령어는 npm install
과 달리 package-lock.json
파일을 변경하지 않는다. 그래서 package-lock.json
파일로 인한 커밋 충돌을 예방 할 수 있다.