파인더
추가된 버전: v10.16.0
파인더 함수를 사용하면 패키지 이름뿐만 아니라 패키지의 모든 속성으로 종속성 그래프를 검색할 수 있습니다. 파인더 함수는 .pnpmfile.mjs에 선언하고 pnpm list 및 pnpm why와 함께 사용할 수 있습니다.
파인더 함수 정의하기#
파인더 함수는 프로젝트의 .pnpmfile.mjs 파일에서 finders export 아래에 선언합니다. 각 함수는 컨텍스트 객체를 받으며 다음 중 하나를 반환해야 합니다:
true→ 이 종속성을 결과에 포함합니다,false→ 건너뜁니다,- 또는
string→ 이 종속성을 포함하고 해당 문자열을 추가 정보로 출력합니다.
예시: peerDependencies에 React 17이 있는 모든 종속성과 일치하는 파인더:
.pnpmfile.mjs
export const finders = {
react17: (ctx) => {
return ctx.readManifest().peerDependencies?.react === "^17.0.0"
}
}
파인더 컨텍스트 (ctx)#
각 파인더 함수는 방문 중인 종속성 노드를 설명하는 컨텍스트 객체를 받습니다.
| 필드 | 유형/예시 | 설명 |
|---|---|---|
name | "minimist" | 패키지 이름. |
version | "1.2.8" | 패키지 버전. |
readManifest() | package.json 객체를 반환합니다 | 패키지 매니페스트를 불러옵니다 (peerDependencies, license, engines 등의 필드에 사용하세요). |
파인더 사용하기#
--find-by=<functionName> 플래그로 파인더를 호출할 수 있습니다:
pnpm why --find-by=react17
출력:
@apollo/client 4.0.4
├── @graphql-typed-document-node/core 3.2.0
└── graphql-tag 2.12.6
추가 메타데이터 반환하기#
파인더는 문자열을 반환할 수도 있습니다. 해당 문자열은 출력에서 일치하는 패키지와 함께 표시됩니다.
예시: 패키지 라이선스 출력하기:
export const finders = {
react17: (ctx) => {
const manifest = ctx.readManifest()
if (manifest.peerDependencies?.react === "^17.0.0") {
return `license: ${manifest.license}`
}
return false
}
}
출력:
@apollo/client 4.0.4
├── @graphql-typed-document-node/core 3.2.0
│ license: MIT
└── graphql-tag 2.12.6
license: MIT
기타 사용 사례:
- 특정 라이선스를 가진 모든 패키지를 찾습니다.
- 최소 Node.js 버전을 요구하는 패키지를 감지합니다.
- 바이너리를 노출하는 모든 종속성을 나열합니다.
- 모든 패키지의 후원 URL을 출력합니다.