pnpm link
별칭: ln
현재 로컬 패키지를 시스템 전체 또는 다른 위치에서 액세스할 수 있도록 합니다.
pnpm link <dir|pkg name>
pnpm link
옵션#
pnpm link <dir>#
<dir> 디렉터리의 패키지를 이 명령을 실행하는 위치의 패키지 node_modules에 링크합니다.
예를 들어,
~/projects/foo안에서pnpm link ../bar를 실행하면foo/node_modules/bar에bar에 대한 링크가 생성됩니다.
pnpm link#
이 명령을 실행한 위치의 패키지를 전역 node_modules에 링크하여, 다른 패키지에서 pnpm link <pkg>으로 참조할 수 있게 합니다. 또한 패키지에 bin 필드가 있으면 패키지의 바이너리를 시스템 전체에서 사용할 수 있게 됩니다.
pnpm link <pkg>#
지정한 패키지 (<pkg>)를 전역 node_modules에서 이 명령을 실행한 위치의 패키지 node_modules로 링크합니다.
사용 사례#
설치된 패키지를 로컬 버전으로 교체#
foo 패키지를 사용하는 프로젝트가 있다고 가정해 봅시다. foo를 변경하고 프로젝트에서 테스트하고 싶습니다. 이 경우 pnpm link를 사용하여 로컬 버전의 foo를 프로젝트에 링크할 수 있습니다.
cd ~/projects/foo
pnpm install # install dependencies of foo
pnpm link # link foo globally
cd ~/projects/my-project
pnpm link foo # link foo to my-project
전역 node_modules 디렉터리를 사용하지 않고 한 디렉터리의 패키지를 다른 디렉터리에 링크할 수도 있습니다:
cd ~/projects/foo
pnpm install # install dependencies of foo
cd ~/projects/my-project
pnpm link ~/projects/foo # link foo to my-project
바이너리를 전역으로 추가#
CLI 도구처럼 바이너리가 있는 패키지를 개발하는 경우, pnpm link를 사용하여 바이너리를 시스템 전체에서 사용할 수 있게 할 수 있습니다.
이는 pnpm install -g foo를 사용하는 것과 같지만, 레지스트리에서 다운로드하는 대신 로컬 버전의 foo를 사용합니다.
패키지의 package.json에 bin 필드가 있는 경우에만 바이너리를 사용할 수 있다는 점을 기억하세요.
cd ~/projects/foo
pnpm install # install dependencies of foo
pnpm link # link foo globally
pnpm link와 file: 프로토콜 사용의 차이점은 무엇인가요?#
pnpm link를 사용하면 링크된 패키지가 소스 코드로부터 심볼릭 링크됩니다. 링크된 패키지의 소스 코드를 수정할 수 있으며, 변경 사항은 프로젝트에 반영됩니다. 이 방법에서는 pnpm이 링크된 패키지의 종속성을 설치하지 않으므로, 소스 코드에서 직접 설치해야 합니다. 이는 링크된 패키지에 특정 패키지 관리자를 사용해야 할 때 유용할 수 있습니다. 예를 들어, 링크된 패키지에는 npm을, 프로젝트에는 pnpm을 사용하려는 경우입니다.
dependencies에서 file: 프로토콜을 사용하면 링크된 패키지가 프로젝트 node_modules에 하드 링크되며, 링크된 패키지의 소스 코드를 수정하면 변경 사항이 프로젝트에 반영됩니다. 이 방법을 사용하면 pnpm은 링크된 패키지의 종속성도 설치하여, 링크된 패키지의 node_modules를 재정의합니다.
정보
피어 종속성을 다룰 때는 file: 프로토콜을 사용하는 것을 권장합니다. 프로젝트 종속성에서 피어 종속성을 더 잘 확인하여, 링크된 종속성이 메인 프로젝트에 지정된 종속성 버전을 올바르게 사용하도록 보장하므로 더 일관되고 예상 가능한 동작으로 이어집니다.
| 기능 | pnpm link | file: 프로토콜 |
|---|---|---|
| 심볼릭 링크/하드 링크 | 심볼릭 링크 | 하드 링크 |
| 소스 코드 수정 사항 반영 | 예 | 예 |
| 링크된 패키지의 종속성 설치 | 아니요(수동 설치 필요) | 예(링크된 패키지의 node_modules를 재정의) |
| 종속성에 다른 패키지 관리자 사용 | 가능(예: 링크된 패키지에 npm 사용) | 아니요, pnpm을 사용합니다 |