image.png

npm에서 시작한 패키지 매니저는 4가지 선택지가 존재한다.

npm / yarn 1.0 (yarn classic) / yarn 2.0 (yarn berry) / pnpm

겉으로 보기에는 별 차이 없어보이지만, 패키지 관리자들의 내부 동작이 다르다. npm과 yarn은 flat한 node_modules 폴더에 dependencies를 설치한다. 하지만 이 전략은 곧 문제점이 드러나기 시작한다.

그래서 pnpm은 dependencies를 중첩된 node_modules 폴더에 효율적으로 저장하기 시작했고, yarn berry는 plug and play 모드를 도입해 이러한 문제를 해결하기 시작했다.

패키지 매니저란

JavaScript, TypeScript를 사용하면 require, import 구문을 사용해 외부 의존성을 참조하게 된다.

import React from 'react';

이 코드를 올바르게 참조할 수 있도록 보장해주는 프로그램이라고 보면 된다.

JavaScript 표준인 ECMAScript에 의하면, 정확한 절대 경로나 상대 경로를 통해서만 import 할 수 있다. 실제로 Deno나 브라우저 표준 문법을 보면 정확한 절대 경로를 사용하고 있다.

import React from '/Users/junyeokk/path/to/react/index.js';

매번 이렇게 전체 경로를 작성하는 것은 매우 번거로운 일이다. 게다가 더 큰 문제가 있다. 바로 버전 관리다.

'react'를 사용한다고 했을 때, 어떤 버전을 사용할지 명확하지 않다. 18.0.1을 사용할지, 18.3.1을 사용할지, 아니면 최근에 출시된 19 RC 버전을 사용할지 모호하다.

이런 버전 정보는 소스 코드가 아닌 상위 디렉터리의 package.json 파일에서 관리한다. package.json에 의존성을 명시하고 npm install 또는 yarn add 명령어를 실행하면, 패키지 매니저가 명시된 버전의 패키지를 설치한다.