파인더

추가된 버전: 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을 출력합니다.