회사에서 모노레포를 사용하면서 pnpm이라는 패키지 관리자를 사용하고 있어 공부 겸 좋은점들이 많아 개인프로젝트에도 적용해본 경험을 씁니다.
pnpm을 쉽게 설명 하자면 npm의 단점을 보완한 패키지 매니저다.
npm을 사용하여 개발하다 보면 여러 프로젝트에서 중복되는 의존성이 node_modules마다 중복으로 설치됩니다. 해결방안으로 프로젝트에 설치하는것이 아니라 별도의 모듈 디렉토리에 1개에만 설치하고 사용할 때는 모듈 디렉에 링크하여 사용합니다.
- pnpm 공식사이트
npm install -g pnpm
*의존성 문제가 걸릴경우
sudo npm install -g pnpm
이렇게 전역에 설치를 하고 pnpm -v
를 하였을때 버전이 뜨게 된다면 제대로 설치가 된겁니다.
npx npkill
ok to proceed? 라는 문구가 나오면 y를 눌러서 제거는 하시면 됩니다.
스페이스바를 누르면 삭제가 진행이되고 complete가 되면 q를 누르셔서 현재 상태에서 나오시면 됩니다.
이제껏 쌓여 있던 노드 모듈을 제거하는 과정입니다.
그리고 node_moducles를 삭제합니다.
"scripts": {
"preinstall": "npx only-allow pnpm",
...
}
프로젝트에서 pnpm을 사용하는 경우, 다른 패키지 매니저를 사용하는 것을 막기 위해선 다음 preinstall 스크립트를 package.json에 추가합니다.
packages:
# include packages in subfolders (e.g. apps/ and packages/)
- "apps/**"
- 'packages/**'
# if required, exclude some directories
- '!**/test/**'
모노레포라면 workspace 파일을 작성한다.
추가적인 설명은 pnpm workspace 문서를 참고하시면 됩니다.
pnpm import
위 명령어로 yarn.lock 또는 package-lock.json으로 pnpm-lock.yaml 파일을 생성한다.
rm ./package-lock.json
현재 프로젝트에 있던 node_moducles를 삭제합니다.
혹시 yarn을 사용하셨다면 yarn-lock.json등 다른 lock파일이 있으면 삭제해줍니다.
위의 npx npkill을 하여 node_moduels가 없다면 생략하셔도 됩니다.
pnpm install
마지막으로 의존성을 설치해주면 됩니다.
이렇게 하시면 node_modules가 생성됩니다.
이렇게 npm -> pnpm 마이그레이션 작업이 끝났습니다!
추가적으로 pnpm CLI 명령어는 pnpm 홈페이지에 잘 나와 있습니다.
많이 쓰는 명령어는 아래에 기재합니다.
pnpm add : 패키지를 설치한다.
pnpm add -D : devDependencies에 추가한다.
pnpm install: 프로젝트의 모든 디펜던시를 설치한다.
pnpm remove : 패키지를 제거한다.
pnpm prune: 사용되지 않는 패키지를 의존성에서 제거한다.
https://pnpm.io/installation
https://dev.to/andreychernykh/yarn-npm-to-pnpm-migration-guide-2n04
https://blog.joe-brothers.com/pnpm-migration-guide/