회사에서 진행중인 프로젝트 외에 다른 프로젝트를 인수인계 받으면서 작은 문제를 겪었다. 패키지 매니저와 관련된 문제인데 정확히 작동 원리나 배경 지식이 없으니 원인을 찾는 것부터 시간을 엄청 썼다. 결론은 package-lock.json파일이 없어서 패키지 버전 오류로 확인됐다. 이 오류를 계기로 관련 지식을 기록해놔야겠다는 필요성이 들어서 정리해보려고한다.
보통 일반적으로 사용하는 npm, yarn는 여러 방식을 통해 패키지 의존성을 관리한다.
package-lock.json/ yarn.lock
- package.json에 명시된 파일을 설치하는 과정에서 lock 파일을 참조해 정확한 버전을 설치한다.
의존성 트리
- 패키지의 의존성은 트리 구조로 나타낸다. 루트 패키지는 package.json에 명시된 패키지를 기준으로 하위에 의존하는 다른 패키지가 나열되는 방식이다.
의존성 해결 알고리즘
- 패키지가 의존하는 다른 패키지의 버전 충돌이 발생하면, 이를 해결하기 위해 적절한 버전을 선택해서 설치한다.
예를 들어, A,B 패키지 의존성으로 설치된 C패키지가 ^1.0.2버전과 ^2.0.0버전을 요구할 때 모두를 만족시키는 ^2.0.0 ~ 3.0.0 미만을 설치하는 방식으로 의존성을 해결한다.
//yarn.lock 주소와 함께 해시값이 함께 저장되어있음
resolved "https://registry.yarnpkg.com/@ajna/pagination/-/pagination-1.4.19.tgz#checksum값"