pnpm link

별칭: ln

현재 로컬 패키지를 시스템 전체 또는 다른 위치에서 액세스할 수 있도록 합니다.

pnpm link <dir|pkg name>
pnpm link

옵션#

<dir> 디렉터리의 패키지를 이 명령을 실행하는 위치의 패키지 node_modules에 링크합니다.

예를 들어, ~/projects/foo 안에서 pnpm link ../bar를 실행하면 foo/node_modules/bar에 bar에 대한 링크가 생성됩니다.

이 명령을 실행한 위치의 패키지를 전역 node_modules에 링크하여, 다른 패키지에서 pnpm link <pkg>으로 참조할 수 있게 합니다. 또한 패키지에 bin 필드가 있으면 패키지의 바이너리를 시스템 전체에서 사용할 수 있게 됩니다.

지정한 패키지 (<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 linkfile: 프로토콜
심볼릭 링크/하드 링크심볼릭 링크하드 링크
소스 코드 수정 사항 반영예예
링크된 패키지의 종속성 설치아니요(수동 설치 필요)예(링크된 패키지의 node_modules를 재정의)
종속성에 다른 패키지 관리자 사용가능(예: 링크된 패키지에 npm 사용)아니요, pnpm을 사용합니다