기존 package-lock.json은 현재 설치된 디펜던시의 버전들을 특정 버전으로 고정하기 위하여 생겨난 것이 맞다.

하지만 npm 5.1.0버전 이후로는 그 관리 방식이 변경되었다. ( 관련이슈 ) 요약하자면, 사용중이던 패키지의 버전을 올린 후 설치하면 package-lock.json 역시 변경이 되어야 하는데 그렇지 못하였기 때문에, 설치된 패키지의 버전이 변경된다면 그에 맞추어 package-lock.json도 변경되어야 하는 것이 아니냐는 내용이다.

어쩃든 이 변경으로 인해 package-lock.json은 npm i를 실행할 때마다 실제 설치된 버전에 맞추어 변경되는 방식으로 동작하고 있다. 아니 이러면 package-lock.json이 왜 필요하지? 라는 의문이 계속 생긴다. 그래서인지 이후 npm 5.7.0 버전에서는 npm ci라는 명령어가 릴리즈되었는데, 이는 pacakge-lock.json에 있는 정보를 바탕으로 실제 npm 모듈들을 설치하는 명령어이다. npm ci에 대해서 공식문서에는 다음과 같이 설명되어 있다.

즉, 명확히 지정된 디펜던시를 설치하기 위한 용도라고 생각하면 된다. 따라서 기존 npm i 와는 다음과 같은 차이점을 지닌다.