Thief of Wealth

package-lock.json, yarn.lock 은 뭐하는 녀석인가?

프론트엔드 개발자라면 반드시 만나봤을 lock파일.. 이녀석들은 도대체 무엇을 하는 녀석들일까?

이녀석들은 "패키지 잠금 파일"이라고 불린다.

현재 패키지 매니저

현재 자바스크립트에서 사용되고 있는 패키지 매니저에 대해서 간단히 집고 넘어가자.

패키지를 프로젝트에 설치하거나 갱신/삭제하는데 사용되는 도구를 패키지 매니저라고 하는데, 현재 자바스크립트 커뮤니티에는 일반적으로 npm, yarn을 사용하고 있다.

기본적으로 이 2가지 도구들은 패키지 잠금 기능을 지원하고 있는데, npm => package-lock.json yarn => yarn.lock

package.json

패키지 관리를 위해 npm을 쓰든, yarn을 쓰든 모든 프로젝트의 메타정보는 package.json에 관리가 되는데,

나중에 node_modules가 없더라도 package.json의 정보만으로 해당 프로젝트에 필요한 패키지들을 설치할 수 있다.

설치 시점에 따라 달라지는 패키지 버전

그렇다면 package.json 파일만 있으면 프로젝트의 모든 개발자가 package.json을 이용해서 항상 동일한 버전의 패키지를 설치할 수 있을까?

 

그렇지 않다.

 

모든 개발자가 정확히 같은 시각 동시에 패키지를 설치하지 않는 이상, 개발자들은 서로 상이한 패키지를 설치할 확률이 발생하게 된다.

가장 큰 이유는 package.json 파일에 등록된 패키지의 버전의 ^나 ~를 통해서 범위로 지정된 경우가 많기 때문이다.

 

ex)

react 패키지가 package.json에서 "react": "^16.8.2"으로 되어있으면 16.8.2이상 17.0.0 미만의 범위로 지정이 된다.

그래서 설치시점에 따라서 패키지의 버전의 달라질 수 있다.

 

패키지의 버전이 달라지면?

 

팀단위의 개발에서 어떤 개발자는 버그가 있고, 어떤 개발자는 버그가 없는 등의 개발간의 큰 혼선이 발생할 수 있다.

그래서 npm이든 yarn이든 상관없이 해당 시점의 버전을 잠금(lock)할 수 있는 기능을 지원하게 되었다. 🥳

 

결론: 해당 시점의 패키지 버전을 lock하기 위해서

 

참고

https://www.daleseo.com/js-package-locks/

profile on loading

Loading...