npm은 세계에서 가장 큰 소프트웨어 등록 기관으로, Node.js 생태계의 가장 대표적인 패키지 매니저이다.
npm의 의존성 문제를 해결하기 위해 고안된 빠르고 효율적인 패키지 매니저이다.
npm vs pnpm
npm: flattened dependency tree를 통해 의존성을 관리하며, 이러한 방식은 디스크의 크기를 덜 사용하게 되지만, 복잡한 node_modules 디렉토리의 구조를 야기한다.
pnpm: node_modules를 global on-disk content-addressable store에 hard linking과 symbolic linking방식으로 연결하여 관리하며,package.json
에 명시되지 않은 모듈을 사용할 수 없게 함으로써 의도되지 않은 버그를 피한다.
Facebook에서 개발한 패키지 매니저로, npm과 비슷한 목적을 가지고 있다.
yarn.lock
을 사용하여 의존성 관리yarn.lock
을 사용하여 의존성 트리를 고정시켜 재현 가능한 빌드 지원npm vs yarn
속도(perfomance)
npm: 여러 개의 패키지를 순차적으로 설치하여 속도가 느리다.
yarn: 다운받은 패키지 데이터를 캐시(cache)에 저장하여 중복된 데이터는 다운로드하지 않고, 캐시(cache)에 저장된 파일을 활용함으로써 패키지 설치속도가 매우 빠르다.안정성(stability) / 보안성(security)
npm: 패키지가 설치될 때 자동으로 코드와 의존성을 실행할 수 있도록 허용하여 안정성을 위협할 수 있다. 특히 보장된 정책 없이 등록한 패키지가 존재할 수 있다는 점에서 더욱 위험도가 높다.
yarn:yarn.lock
이나package.json
으로부터 설치만 하며,yarn.lock
은 모든 디바이스에 같은 패키지를 설치하는 것을 보장하기 때문에 버전의 차이로 인해 생기는 버그를 방지해줄 수 있다.
Bun은 Node.js와 같은 JavaScript 런타임 및 패키지 매니저이다.
이렇게 보면 pnpm을 쓰는 것이 가장 좋을 듯 한데, 찾아보니 가끔 없는 패키지라고 뜨는 것이 많다고 하는 것 같다. 그래서 그런가? npm은 많이 봤지만 pnpm을 쓰는 걸 많이 못본 것 같다. bun은 런타임이자 패키지 매니저라니.. 속도에 중점을 둔 만큼 런타임도 Node.js보다 빠르고 패키지 매니저도 pnpm보다 빠르니 좋은 것 같긴 한데.. Node.js랑 좀 더 비교해봐야 알 것 같다.