npm이나 yarn을 사용하면 package-lock.json, yarn.lock 파일이 생성되는 것을 확인할 수 있다.
왜 그럴까?
자세한 내용은 여기에서 확인할 수 있는데 간략하게 정리해보자면 다음과 같다.
- 잠금 파일(lock)이 생긴 이유는 설치할때마다 동일한 패키지 버전을 보장하기 위해서이다.
- 왜냐하면, 시맨틱 버저닝 규칙에 따른
~,^때문이다. - 예를 들어,
"react": "^16.8.2"이렇게 리액트 버전을 지정할 경우16.8.2이상17.0.0미만의 범위로 버전이 지정된다. - 잠금 파일이 없을 경우에, 오늘 설치하는 경우엔
16.8.2가 다운받겠지만 6개월 뒤에 새로운 신입이 들어와서 다운을 받을 경우엔 그 당시의 최신 버전인16.9.0이 다운 받아진다.(위 예시는 임의로 지어낸 예시이다.) - 이는 다양한 문제를 야기한다. 버전 이슈로 인해 개발 서버에서는 오류가 발생하나, 로컬 PC에서는 정상적으로 동작할 수 있게 되고 같이 협업하는 개발자들끼리도 혼선이 오게된다. (16.9.0버전에서는 a라는 기능이 사용 가능하지만, 16.8.2에서는 안되는 경우)
- 이러한 문제들로 인해 잠금 파일(
package-lock.json,yarn.lock)이 만들어지게 되었고, 이를 통해 최초 패키지가 설치될때의 버전을 기록하게 되어, 6개월 뒤에 새로운 신입이 들어온다 했을때, 잠금파일에 명시된 패키지 버전에 따라 다운 받게 되어 모두 동일한 환경을 가질 수 있게 되는 것이다.