pnpm link

별칭: ln

로컬 패키지를 현재 프로젝트의 node_modules에 링크합니다.

pnpm link <dir>

옵션#

<dir> 디렉터리의 패키지를 이 명령을 실행하는 패키지의 node_modules에 링크합니다. <dir>는 상대 경로 또는 절대 경로여야 합니다.

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

If the package is not declared in the package.json of the current project yet, a link: dependency is added to it. The overrides entry for the link is written to the root pnpm-workspace.yaml, so the link applies throughout the workspace.

호환성이 깨지는 v11 변경 사항

pnpm link는 더 이상 전역 스토어에서 패키지를 해석하지 않습니다. 상대 경로 또는 절대 경로만 허용됩니다(pnpm link foo 대신 pnpm link ./foo를 사용하세요).

pnpm link --global은 제거되었습니다. 로컬 패키지의 바이너리를 전역으로 등록하려면 대신 pnpm add -g .를 사용하세요.

인수 없이 실행하는 pnpm link는 제거되었습니다. 항상 명시적인 경로를 전달하세요.

Use cases#

설치된 패키지를 로컬 버전으로 교체#

foo 패키지를 사용하는 프로젝트가 있다고 가정해 보겠습니다. foo를 변경하고 프로젝트에서 테스트하고 싶습니다. 이 경우 pnpm link를 사용하여 foo의 로컬 버전을 프로젝트에 링크할 수 있습니다:

cd ~/projects/foo
pnpm install # install dependencies of foo
cd ~/projects/my-project
pnpm link ~/projects/foo # link foo to my-project

바이너리를 전역으로 추가#

로컬 패키지의 바이너리를 시스템 전체에서 사용할 수 있게 하려면 대신 pnpm add -g .를 사용하세요:

cd ~/projects/foo
pnpm install # install dependencies of foo
pnpm add -g . # register foo's bins globally

바이너리는 패키지의 package.json에 bin 필드가 있는 경우에만 사용할 수 있다는 점을 기억하세요.

pnpm link와 file: 프로토콜 사용의 차이점은 무엇인가요?#

pnpm link를 사용하면 링크된 패키지는 소스 코드에서 심볼릭 링크됩니다. 링크된 패키지의 소스 코드를 수정할 수 있으며, 변경 사항은 프로젝트에 반영됩니다. 이 방법에서는 pnpm이 링크된 패키지의 종속성을 설치하지 않으므로, 소스 코드에서 직접 설치해야 합니다. 이는 링크된 패키지에 특정 패키지 관리자를 사용해야 할 때 유용할 수 있습니다. 예를 들어, 링크된 패키지에는 npm을 사용하고 프로젝트에는 pnpm을 사용하려는 경우입니다.

dependencies에서 file: 프로토콜을 사용하면 링크된 패키지는 프로젝트의 node_modules에 하드 링크되며, 링크된 패키지의 소스 코드를 수정하면 변경 사항이 프로젝트에 반영됩니다. 이 방법을 사용하면 pnpm은 링크된 패키지의 종속성도 설치하며, 링크된 패키지의 node_modules를 재정의합니다.

정보

피어 종속성을 다룰 때는 file: 프로토콜을 사용하는 것이 좋습니다. 프로젝트 종속성에서 피어 종속성을 더 잘 확인하여, 링크된 종속성이 메인 프로젝트에 지정된 종속성 버전을 올바르게 사용하도록 보장하므로 더 일관되고 예상 가능한 동작으로 이어집니다.

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