NestJS의 패키지매니저
패키지매니저란?
패키지 매니저는 프로젝트에서 사용하는 외부 라이브러리(패키지)들을 설치, 업데이트, 삭제, 버전 관리해주는 도구이다.
Node.js 생태계에서는 보통 JavaScript/TypeScript로 작성된 라이브러리를 관리하게 되며 이를 위해 npm,. yarn, pnpm 같은 패키지 매니저를 사용한다.
즉, 패키지 매니저는 프로젝트에 사용되는 패키지를 쉽게 관리하고 설치해주는 도구이다.
1. npm
Node.js의 기본 패키지 매니저이다.
•
특징
◦
가장 널리 사용되고 문서가 풍부함
◦
NestJS 설치 시 기본값으로 사용됨
•
장점
◦
신뢰도가 높고 안정적이다.
◦
공식 Node.js문서 및 튜토리얼과 잘 호환됨
◦
에러 메세지 및 경고가 직관적이다.
•
단점
◦
상대적으로 속도가 느림
◦
워크스페이스 기능이 불안전함 (특히 모노레포에선 불편하다)
▪
NestJS CLI로 새로운 프로젝트를 생성하면 하위 앱 경로를 자동으로 인식하지 못한다.
▪
또한 —project 옵션없이 생성하면 오류가 나고
▪
nest-cli.json에 projects 필드에 계속 수동으로 새로 만든 프로젝트를 넣어줘야 한다.
▪
모노레포는 직접적인 앱 간 참조를 권장하지 않기때문에 Module not found 오류 발생 가능성
2. yarn
Facebook에서 만든 대안 패키지 매니저이다.
•
특징
◦
속도가 npm보다 빠르며 효율적인 캐싱을 제공한다.
◦
yarn workspaces 로 모노레포에 유리
•
장점
◦
빠르고 안정적인 설치 속도
◦
모노레포 지원
◦
yarn.lock 으로 의존성 고정 강력
•
단점
◦
최신 기능은 pnpm 보다 느리게 반영됨
3. pnpm
•
특징
◦
빠르고 디스크 공간 효율적인 패키지 매니저이다.
◦
모노레포 최적화, 링크 기반 설치
◦
NestJS도 공식적으로 잘 지원한다.
•
장점
◦
매우 빠름
◦
하드링크 기반 저장소이기 때문에 디스크 절약
▪
pnpm은 패키지를 node_modules 에 직접 복사하지 않고, 하드링크로 연결한다.
•
따라서 동일한 패키지를 중복 저장하지 않아도 된다.
→ 따라서, 100개의 프로젝트가 axios를 써도 1개만 저장함
→ 디스크 공간이 절약된다.
◦
워크스페이스 사용이 매우 강력하다.
▪
pnpm:workspace로 여러 패키지를 하나의 루트에서 관리한다.
◦
의존성 중복을 최소화한다.
▪
꼭 필요한 의존성 패키지만 설치한다.
•
단점
◦
node_modules 구조가 npm/yarn과 달라서 헷갈릴 수 있다.
◦
일부 오래된 패키지가 pnpm 구조에 문제를 일으킬 수 있다.