자바스크립트를 자주 사용할 일은 없지만 node를 사용했던 적도 있고 블로그 프론트엔드가 next.js여서 yarn을 간간히 이용 했었다.
이번에 블로그 리뉴얼 하며 원본 레포대로 패키지 관리자도 pnpm으로 변경하기로.
yarn에서 pnpm으로 마이그레이션
- corepack을 사용한 pnpm 설치
corepack enable # corepack 활성화
corepack은 Node.js에 내장된 패키지 매니저 관리 도구로, corepack 사용이 필수는 아니지만 Yarn과 pnpm의 버전을 자동으로 관리하고, 프로젝트에서 지정된 버전의 패키지 매니저를 사용할 수 있게 해준다.
- 프로젝트의 패키지 관리자 활성화
corepack prepare --activate
위 명령어는 아래처럼 package.json에 설정한것을 기준으로 설치하기때문에
{ "packageManager": "pnpm@9.0.0" }
위처럼 버전을 명시하지않았을경우 에러가 발생
다시 아래처럼 버전을 명시하거나
corepack prepare pnpm@latest --activate
이렇게 입력해도 설치 의사를 묻는다.
pnpm
pnpm-lock.yml 파일이 이미 존재하면 버전확인 가능
pnpm --version
- node_modules 제거후 package.json을 기준으로 프로젝트 의존성 재설치(pnpm-lock.yaml생성)
rm -rf node_modules pnpm install
의존성을 갱신할때도 사용하며 , 이미 설치된 의존성은 pnpm-lock.yaml 파일을 기준으로 관리한다.
- 기존 yarn 관련 파일 삭제
- .yarn 폴더, yarn.lock
- 패키지 매니저 pnpm으로 전환 다른 패키지 매니저의 lock 파일(yarn.lock 또는 package-lock.json)을 pnpm 형식으로 변환(pnpm-lock.yaml 파일 생성)
pnpm import
- 사용하지 않는 패키지 매니저 비활성화
corepack disable yarn
이후 yarn 명령을 사용한다면 Corepack이 더 이상 yarn의 버전을 관리하지 않으므로, 시스템에 설치된 yarn 버전이나 글로벌로 설정된 yarn을 사용한다.
pnpm 기본 명령어
기본명령어는 대체로 yarn과 유사하다.
작업 | pnpm | Yarn |
프로젝트 초기화 | pnpm init | yarn init |
특정 패키지 설치 (최초 설치) | pnpm install | yarn install |
패키지 설치 (패키지 이름 지정) | pnpm add [package] | yarn add [package] |
개발 의존성 설치 (패키지 이름 지정) | pnpm add [package] --dev | yarn add [package] --dev |
특정 의존성 제거 | pnpm remove [package] | yarn remove [package] |
의존성 업데이트 | pnpm update or up | yarn upgrade |
pnpm 기타 명령어
사용되지 않는 패키지 제거
package.json에 정의된 의존성 목록과 비교하여, 더 이상 필요하지 않은 패키지를 삭제
node_modules 디렉토리에서 필요 없는 패키지들을 제거할 때 사용
pnpm store prune과 다른것임을 유의해야 한다.
pnpm prune
프로덕션 의존성만 남기고 제거
pnpm prune --prod
pnpm prune은 모노레포 내의 모든 워크스페이스에 대해 재귀적으로 실행되지 않아 모노레포에서는 pnpm install --prod를 사용해야한다.
프로덕션 의존성만 설치. 이미 설치된 패키지는 제거
pnpm install --prod
캐시에서 수정된 패키지 확인
pnpm store status
불필요한 캐시 제거
pnpm의 패키지 저장소에서 사용되지 않는 패키지를 정리합니다. 이 명령어는 pnpm의 전역 저장소에서 사용되지 않는 패키지 버전을 제거하여 디스크 공간을 절약
pnpm store prune
프로젝트 배포
pnpm deploy
pnpm의 장점
- pnpm은 yarn과 달리 패키지 캐시를 글로벌 캐시에서 관리하여 캐시된 패키지를 재사용 가능
- pnpm은 패키지를 하드 링크로 관리하여 공간 절약과 설치 속도를 줄인다.
- 의존성 중복을 방지한다.
기본 패키지 관리자도 괜찮다
패키지관리자의 선택에 대한 각자의 기준이 있을텐데, 아래처럼 기본 패키지관리자인 npm을 선호하는 분도 있다.
PNPM과 YARN이 필요하지 않은 이유 | HackerNoon