최근에 cli 패키지를 개발하면서, npm에 배포하기 전 yalc 를 통해서 로컬에서 테스트를 해보고 있었다
기존에 npm에 배포된 패키지에서는 컴포넌트 코드를 복사하는 기능이 있고, 현재 로컬에서 테스트하고 있는 기능은 유저의 로컬 파일 중 특정 파일이 있는지 체크해서 없으면 에러를 내는 기능을 추가했다
그래서 yalc로 패키지를 배포한 다음, pnpm dlx 로 실행하면 기존에 배포된 패키지의 명령어가 출력되었다

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

정상적으로 로컬에서 추가한 기능이 동작한다
yalc의 문제일 수도 있겠지만, 사실 예전부터 저 두 명령어가 동일하진 않다는 걸 어렴풋이 알고 있어서 정확히 무엇이 다른지 한번 찾아봤다
의존성으로 설치하지 않고 레지스트리에서 패키지를 가져와 핫로드하고 노출하는 기본 명령 바이너리를 실행한다
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).
pnpm에는 바이너리 파일을 실행하는 명령어가 두개로 나뉜다
하나는 pnpm dlx, 하나는 pnpm exec이 있다. 이 둘은 어느 경로에서 파일을 찾아서 실행하는 지에 따라 구분된다
npm에서는 이 둘을 하나의 명령어인 npx로 처리한다
pnpx는 pnpm dlx의 alias이다