pnpm shim <cmd>
추가된 버전: v12.0.0-rc.6 (pnpm v12 전용)
프로젝트 인식 명령 shim을 관리합니다.
이 명령으로 생성된 shim은 전역 설치를 기반으로 하지 않습니다. 이 shim은 현재 위치한 프로젝트가 무엇을 실행할지 결정하도록 하기 위해서만 존재합니다: pnpm shim add yarn은 현재 프로젝트가 고정한 버전을 실행하는 yarn 명령을 링크하고, 해당 버전을 필요할 때 프로비저닝합니다. 머신에 pnpm만 설치되어 있는 경우, 이것이 Yarn 프로젝트 내에서 yarn이 동작하도록 해 줍니다.
항상 의도적으로 shim을 생성합니다 — pnpm setup이나 설치의 부수 효과로 shim이 작성되는 경우는 없습니다. shim은 PATH의 나머지 부분이 그 이전에 확인한 항목을 가리기 때문입니다.
Commands#
add#
pnpm shim add <pkg>...
각 패키지의 모든 bin에 대한 shim을 전역 bin 디렉터리(pnpm bin -g)에 링크하고, shim이 실제로 디스패치되도록 globalShims 설정에 패키지를 기록합니다.
pnpm shim add yarn
pnpm이 프로비저닝하는 패키지 관리자 — npm, yarn, bun — 의 경우 조회가 필요하지 않습니다: 별칭을 포함하여(yarn과 yarnpkg, npm과 npx) 해당 bin을 미리 알고 있습니다. 그 외의 패키지의 경우 패키지의 게시된 매니페스트에서 bin을 읽습니다; bin을 게시하지 않은 패키지는 ERR_PNPM_SHIM_NO_BINS 오류로 실패합니다.
이미 전역 bin 디렉터리에 있는 bin은 다른 무언가 — 전역으로 설치된 패키지 또는 다른 패키지의 shim — 에 속하므로, 이 명령은 동작 중인 명령을 빼앗는 대신 ERR_PNPM_SHIM_BIN_CONFLICT 오류와 함께 거부합니다.
globalShims: false가 설정된 상태에서 shim을 추가하면 ERR_PNPM_SHIMS_DISABLED 오류로 실패합니다: 이 설정은 모든 프로젝트 인식 shim을 끄므로, shim이 PATH에 있어도 아무 동작도 하지 않기 때문입니다.
rm#
pnpm shim rm <pkg>...
별칭: remove, uninstall
패키지의 shim과 add가 해당 패키지에 대해 기록한 globalShims 항목을 제거합니다.
ls#
pnpm shim ls
별칭: list
전역 bin 디렉터리의 모든 shim을 해당 shim에 적용되는 정책과 함께 나열합니다:
yarn (auto): yarn, yarnpkg
버전 선택 방식#
현재 작업 디렉터리에서 위로 올라가며 shim이 현재 위치한 프로젝트를 확인합니다:
- 패키지 관리자의 경우 프로젝트의
packageManager또는devEngines.packageManager고정 값이 버전을 결정하고, pnpm이 해당 버전을 프로비저닝합니다. 고정 값은 프로젝트를 무엇으로 설치할지 프로젝트가 직접 명시한 것이므로, 전역으로 설치된 해당 패키지 관리자보다 우선합니다. - 그 외의 패키지의 경우 프로젝트의
node_modules/.bin/<name>이 사용됩니다.
프로젝트에서 해당 명령을 제공하지 않으면 전역으로 설치된 버전이 실행됩니다 — shim은 디스패치가 적용되지 않았다는 이유만으로 명령을 실패시키지 않습니다.
프로젝트 인식 전역 bin의 신뢰 규칙이 여기에도 적용됩니다: npm에 게시된 패키지 관리자는 정확한 버전에 대한 npm 서명으로 검증되어 묻지 않고 전환되는 반면, Bun과 Yarn 6은 체크섬이 고정된 플랫폼 아카이브로 제공되어 확인 프롬프트를 거칩니다. 이 응답은 프로젝트별 그리고 바이너리별로 기억되므로, 프로젝트의 고정 버전을 다른 버전으로 변경하면 다시 묻습니다.