pnpm pnpx pnpm dlx pnpm exec... 알아보기

jh·2024년 12월 17일

최근에 cli 패키지를 개발하면서, npm에 배포하기 전 yalc 를 통해서 로컬에서 테스트를 해보고 있었다

기존에 npm에 배포된 패키지에서는 컴포넌트 코드를 복사하는 기능이 있고, 현재 로컬에서 테스트하고 있는 기능은 유저의 로컬 파일 중 특정 파일이 있는지 체크해서 없으면 에러를 내는 기능을 추가했다

그래서 yalc로 패키지를 배포한 다음, pnpm dlx 로 실행하면 기존에 배포된 패키지의 명령어가 출력되었다

pnpm dlx

혹시나 해서 pnpm dlx -> npx로 변경하니

npx

정상적으로 로컬에서 추가한 기능이 동작한다

yalc의 문제일 수도 있겠지만, 사실 예전부터 저 두 명령어가 동일하진 않다는 걸 어렴풋이 알고 있어서 정확히 무엇이 다른지 한번 찾아봤다

pnpm dlx(pnpx)

의존성으로 설치하지 않고 레지스트리에서 패키지를 가져와 핫로드하고 노출하는 기본 명령 바이너리를 실행한다

  • 의존성으로 설치하지 않고, registry에서 가져와 바로 실행하는 명령어

npx

npx searches for the binary locally in node_modules/.bin and runs it if found (like pnpm exec). Otherwise, download it from the registry remotely and run its binary (like pnpm dlx).

  • 제일 먼저 로컬(node_modules/.bin)에서 찾은 다음, 없을 경우 registry에서 가져온 뒤 실행하는 명령어

pnpm exec

  • 프로젝트 범위(node_modules)에서 명령을 실행한다
  • exec의 경우 (다른 기본 명령어와 충돌이 나지 않는다면) 생략 가능하다

정리

  • pnpm에는 바이너리 파일을 실행하는 명령어가 두개로 나뉜다

  • 하나는 pnpm dlx, 하나는 pnpm exec이 있다. 이 둘은 어느 경로에서 파일을 찾아서 실행하는 지에 따라 구분된다

  • npm에서는 이 둘을 하나의 명령어인 npx로 처리한다

  • pnpx는 pnpm dlx의 alias이다

0개의 댓글