[패키지 매니저] pnpm

Geunhyung Pyun·2023년 5월 11일
1

패키지 매니저

목록 보기
1/1

개요

2017년에 새로 소개된 JS 패키지 매니저이다.
기존에 있던 npm과 yarn classic의 문제점 중 하나로 꼽혔던 dependecy의 중복 저장을 해결하기 위해 나온 대체품이다.

가존의 패키지 매니저는 종속성을 사용하는 프로젝트가 30개가 있는 경우 해당 종속성의 사본이 30개가 디스크에 저장이 되는 방식을 사용하였다. 이렇게 되면 디스크 공간이 비효율적으로 사용되는 것이기에 절약을 할 필요가 있었다.

pnpm은 위와 같은 hoisting 방식이 아닌 content-addressable stroage 전략을 사용한다. 패키지는 디스크 상 한 곳에만 저장이 된다. 패키지의 파일들은 해당 위치에서 하드링크가 되며 모든 프로젝트는 이를 공유할 수 있는 구조로 만들었기 때문에 디스크 공간을 절약할 수 있었다.

특징

  • 플랫하지 않은 node_modules
    npm같은 경우에는 A->B->C의 종속 관계를 가진 패키지가 있으면, 최상위에 A,B,C를 만들고 복사하는 방식이였다.
    이런 작업은 여러 패키지 간의 종속 관계를 이해하고 풀어서 만들어야 하기에 속도가 느렸다. 그래서 옛 npm(2버전)처럼 node_modules/A/node_modules/B... 이렇게 만들고 패키지 별로 격리된 공간 내에서만 플랫하게 만들어 심링크로 연결하였다.

  • 디스크 공간 절약

  • 기존의 패키지 매니저에서도 필요한 package.json이 필요하다. 차이점은 자체 Lock 파일인 pnp-lock.yml 생성한다. package-lock.json의 역할을 해당 yml 파일이 한다.

설치

  • Windows
iwr htttps://get.pnpm.io/install/ps1 -useb | iex
  • Mac
brew install pnpm -> 일반적인 pnpm
혹은
brew install @pnpm/exe -> nodejs가 같이 패키징된 npm.

참고

https://pnpm.io/ko/
https://imch.dev/posts/pnpm-a-manager-what-is-not-flat/
https://yceffort.kr/2022/05/npm-vs-yarn-vs-pnpm

profile
개발자를 원하는 사람.

0개의 댓글