이번엔 패키지 매니저에 공부해볼 것이다! 다양한 것을 알아야 더욱 다양하게 적용해보고 새로운 아이디어가 떠올랐을 때 적용할 수 있기때문이다!
이번엔 Yarn Berry에 대해 알아볼 건데 무려 node_modules 없이 node를 사용할 수 있는 환경이라고 한다!
패키지 매니저란?
단순하게 말하면, 이름대로 패키지를 다루는 작업을 하는 툴
패키지는 코드의 배포를 위해 사용되는 코드의 묶음 (라이브러리 & 실행파일)
위에 기입한 여러 패키지 매니저의 기능은 동일하나 내부의 차이점이 존재
Yarn Berry는 Node.js를 위한 새로운 패키지 관리 시스템
기존 Yarn V1 (Classic) -> 2020.01.25 정식 버전 Yarn v2 (Yarn Berry)가 출시
현재 Yarn Berry는 Babel을 비롯한 큰 오픈소스 레포지토리에서도 채택되어 사용중이라고 함
Yarn Berry Github
: https://github.com/yarnpkg/berry
(대충 개발자가 이해하면 웃긴 짤)
위처럼 NPM은 Node.js를 설치하면 기본적으로 제공되는 패키지 매니저이지만 비효율적이거나 깨져있는 부분이 많음
패키지가 중복으로 설치될 수 있음
의존성 검색의 비효율성
환경에 따라 달라지는 동작
비효율적인 설치
유령 의존성
- 위와 같은 의존성 트리가 구축되어 있다면, [A (1.0)]과 [B (1.0)] 패키지의 중복 설치로 디스크 공간 낭비
- NPM과 Yarn v1에서 오른쪽 트리와 같이 트리 모양 변경
- 호이스팅에 따라 직접 의존하고 있지 않은 라이브러리를 require()할 수 있는 현상 : 유령 의존성
- package.json의 수정에 따라 의존성 관리 시스템이 혼란스러워질 가능성 ⬆️
Yarn Berry는 위에서 언급한 NPM의 '꺠져 있는' 패키지 관리 시스템을 개선하고자 적은 공간의 사용, 효율적인 의존성 검색을 목표로 출시
node_modules 폴더의 특정 패키지를 검색할 때 모든 패키지를 순회하며 해당 패키지 존재 여부를 찾는 방법은 매우 비횰율적
이 두 가지 생각의 결과로 Plug 'n' play이 탄생함
그렇기에 Yarn Berry에서는 node_modeuls를 생성하는 대신 의존성 lookup 파일인 .pnp.cjs를 생성
NPM에서 최신 버전의 Yarn을 내려 받은 뒤, 버전을 Berry로 설치해 Yarn Berry를 사용함
$ npm install -g yarn
$ cd ../path/to/some-package
$ yarn set version berry
Yarn Berry는 하위호환을 위해 패키지 단위로만 의존성 관리 시스템을 도입할 수 있음
node_modules를 생성하지 않는 Yarn Berry는 .yarn/cache 폴더에 저장함
.pnp.cjs 파일에 의존성을 찾을 수 있는 정ㅂ과 기록되고 해당 파일을 통해 디스크의 I/O없이 어떤 패키지가 어떤 라이브러리에 의존하는지, 라이브러리의 위치 모두 알 수 있음
Yarn은 Nopde.js에서 제공하는 require()문의 동작을 덮어씀으로 효율적으로 패키지를 검색할 수 있게 함
Node.js 앱을 실행시 package.json의 scripts에 실행 스크립트를 등록해 사용
Yarn으로 스크린트를 시행하면 PnP로 의존성을 자동으로 불러옴
또한, Zip 아카이브로 의존성을 관리
할 수 있음
없는 의존성이나 더 이상 필요없는 의존성을 쉽게 찾을 수 있음
게다가 Zip 파일의 내용이 변경될 경우 체크섬과 비교해 변경 여부를 감지 가능
의존성 검색
재현 가능성
의존성 설치
엄격한 의존성 관리
의존성 검증
*
Zero-Install
?
- Zero-Install : Yarn Berry에서 의존성을 버전 관리에 포함하는 것
- Yarn PnP는 의존성을 압축 파일로 관리하므로 의존성 용량이 작음
- Git으로 의존성을 관리 가능
여전히 PnP를 지원하지 않는 패키지가 존재