npm에서 pnpm으로 변경하기!

seoyeonpp·2024년 12월 30일

Frontend

목록 보기
8/15
post-thumbnail

기존의 어드민 페이지는 레거시라서 패키지매니저가 npm 이었다.
그래서 pnpm으로 변경하려고 한다!

변경하는 이유는 패키지 별 설치 순서가 병렬로 설치되어 더 빠르다는 장점, 여러 프로젝트에서 전역에 설치된 패키지를 사용하기 때문에, 같은 패키지를 사용하는 프로젝트에서 따로 설치할 필요가 없다는 장점이 있기 때문이다.

npm에서 pnpm으로 설치하는 방법

이 글을 참고해도 좋다.

  • 기존에 pnpm을 설치하지 않았다면 npm i -g pnpm 명령어로 설치한다.
  • 기존 node_modules를 삭제한다.
1. npx npkill 실행
2. kill 할 node_modules에 스페이스바 누르기
3. delete 완료되면 q 로 나가기
  • 패키지매니저를 pnpm만 허용하도록 package.json script 부분에 아래의 스크립트를 추가한다.
"scripts": {
	"preinstall": "npx only-allow pnpm"
}
  • 기존에 있던 package-lock.json을 이용해서 pnpm-lock.yaml 파일을 생성하도록 아래 명령어로 설치한다.
pnpm import
  • 기존에 있던 package-lock.json 파일을 삭제한다.
rm ./package-lock.json
  • 의존성을 pnpm으로 설치한다.
pnpm install

여기서 잠깐!!
pnpm install 했는데 실행이 안되는 경우가 있다.
이런 경우에는 pnpm install --shamefully-hoist 로 옵션을 붙히면 해결된다.
해당 옵션은,

  • PNPM은 npm이나 Yarn처럼 모든 종속성을 최상위 node_modules 폴더로 끌어올림.
    즉, 중첩된 패키지를 모두 풀어서, 프로젝트의 node_modules에서 직접 접근할 수 있도록 만듦
    이렇게 하면 일부 오래된 패키지 또는 경로 문제를 일으키는 패키지가 정상적으로 작동함
    아래와 같은 경우에 사용!
  1. 경로 문제를 해결해야 할 때:
    예: Cannot find module 또는 Module not found 오류 발생 시.
  2. 레거시 패키지를 사용하는 프로젝트:
    오래된 패키지가 PNPM의 기본 모듈 구조를 지원하지 않을 경우.
  3. PNPM을 처음 도입하는 프로젝트에서 기존 환경과의 호환성 문제를 피할 때:
    NPM/Yarn에서 PNPM으로 전환할 때 의존성 경로 문제를 방지하고 싶을 때.

의존성설치가 완료되면 새로운 node_modules가 설치된다.

pnpm 명령어

pnpm add : 패키지를 설치한다.

pnpm add -D : devDependencies에 추가한다.

pnpm install: 프로젝트의 모든 디펜던시를 설치한다.

pnpm remove : 패키지를 제거한다.

pnpm prune: 사용되지 않는 패키지를 의존성에서 제거한다.

pnpm run: script를 실행한다.


번외로 monorepo를 위한 파일 추가

  • root에 pnpm-workspace.yaml 파일을 생성한다.
  • 파일에 디렉토리 내용을 작성한다.
  • 이렇게하면 패키지들이 자동으로 링크가 된다.
packages:
  - 'apps/**'
  - 'libs/**'

0개의 댓글