2021. 9. 29. 15:47ㆍFrontend/JS
package-lock.json , yarn.lock 이란?
리액트 프로젝트를 진행하면 자주 접하게 되는 파일이 있는데, package-lock.json, yarn.lock 파일입니다.
직접 작성한 적은 없지만 이상하리 만큼 자주 접하는 파일입니다.
하나의 프로젝트에 여럿의 개발자가 붙는 상황을 가정해봅시다.
각 개발자마다 단계적으로 투입된다면, 시간차가 발생하여 사용하는 리액트의 버전이 달라질 수 있습니다.
React version
개발자 a : 16.8.0
개발자 b : 16.10.2
개발자 c : 17.0.0
리액트의 버전이 달라지면, 개발자 a에겐 정상적으로 동작하는 기능이 b 에게선 문제가 발생할 수 있습니다.
때문에 프로젝트에 최초로 추가된 패키지의 버전이 무엇인지 기록하여, 해당 패키지의 버전을 고수하는 것이 중요합니다.
해당 패키지의 버전을 기록하는 파일이 바로 package-lock.json 또는 yarn.lock 이며, 추후에 동일한 패키지를 설치할 때 상위 버전이라 하더라도 yarn.lock 파일에 기록된 버전이 설치됩니다.
착각할 수 있는 내용
1) 프로젝트를 최초 생성할 당시 react 최신 버전이 17.8.0 이라 가정합니다.
2) yarn add react 명령어로 react 패키지를 설치하면, yarn.lock 파일엔 17.8.0 버전의 리액트가 기록됩니다.
3) 프로젝트를 최초 생성한 개발자A가 git 에 yarn.lock 파일을 등록하여 다른 개발자들도 17.8.0의 버전을 유지하도록 합니다.
4) 시간이 흘러 개발자 B가 해당 프로젝트를 깃 클론하여 yarn ( or npm install) 을 실행시킵니다. 이 때의 리액트 버전은 18 이상이라 가정합니다.
여기서 yarn.lock 의 포인트는 개발자 B가 yarn ( or npm install) 하여 설치된 리액트는 npm registry 에 등록된 최신 리액트 18 버전이 아니라 17.8.0 을 유지한다는 점입니다.
5) 그런데 만약, 개발자 B가 $ yarn add react 명령어를 사용한다면 어떻게 될까요?
17.8.0 이 아닌 18 버전의 리액트가 package.json 에 등록되면서, yarn.lock 에 기록된 리액트 17.8.0 버전도 18버전으로 갱신됩니다.
때문에 이미 설치된 패키지를 다시 설치하는 경우엔 yarn.lock 을 갱신한다는 점을 유의해야 합니다.
Yarn 공식문서의 yarn.lock 에 대한 설명입니다.
Managed by Yarn
yarn.lock 파일은 빌드 시 자동 생성되며, 전적으로 yarn 패키지 매니저에 의해 처리되어야 합니다.
Yarn CLI 에 종속성이 변경(add/update/delete)되면 yarn.lock 파일이 자동으로 업데이트 됩니다. yarn.lock 파일을 직접 변경하는 것은 권장하지 않습니다.
Current Package only
Yarn 패키지 매니저는 최상위의 yarn.lock 파일만 사용하고, 종속 관계에 있는 다른 모든 yarn.lock 파일은 무시합니다. 최상위의 yarn.lock 파일은 Yarn 패키지 매니저가 전체 종속성 트리에 있는 모든 패키지 버전을 잠그는데(lock) 필요한 모든 내용을 포함하고 있습니다.
Check into Source Control
모든 yarn.lock 파일은 Git 과 같은 소스 관리 프로그램에 등록되어야 합니다. 그렇게 함으로써 해당 프로젝트를 사용하는 모든 컴퓨터에 동일한 종속성 트리를 유지할 수 있습니다.
+ 최초 프로젝트 세팅 당시 git 에 lock 파일을 올려, 추후에 다른 개발자가 사용할 때도 패키지의 버전이 꼬이지 않도록 방지하는 것이 중요합니다.