설정 종속성

설정 종속성을 사용하면 여러 프로젝트에서 설정 파일, 설정, 훅을 공유하고 중앙에서 관리할 수 있습니다. 설정 종속성은 모든 일반 종속성("dependencies", "devDependencies", "optionalDependencies")보다 먼저 설치되므로, 사용자 정의 훅, 패치, 카탈로그 항목을 설정하는 데 적합합니다.

설정 종속성을 사용하면 모든 훅, 설정, 패치, 오버라이드, 카탈로그, 규칙을 한 곳에서 관리하고 여러 저장소에서 사용할 수 있습니다.

설정 종속성의 이름이 pnpm-plugin-*, @*/pnpm-plugin-* 또는 @pnpm/plugin-* 패턴을 따르는 경우, pnpm은 패키지 루트에서 pnpmfile.mjs(없으면 pnpmfile.cjs)를 자동으로 불러옵니다.

설정 종속성을 추가하는 방법#

설정 종속성은 pnpm-workspace.yaml에 정의됩니다. 해당 integrity 체크섬은 pnpm-lock.yaml(전용 env lockfile 문서)에 저장됩니다.

예를 들어, pnpm add --config my-configs를 실행하면 pnpm-workspace.yaml에 다음 항목이 추가됩니다:

pnpm-workspace.yaml
configDependencies:
  my-configs: "1.0.0"

중요:

  • 설정 종속성은 자체적인 일반 dependencies를 가질 수 없습니다. 설정 종속성은 optionalDependencies를 선언할 수 있지만, 한 단계 깊이까지만 가능합니다 — optionalDependencies의 optionalDependencies는 무시됩니다.
  • 설정 종속성은 라이프사이클 스크립트(preinstall, postinstall 등)를 정의할 수 없습니다.

optionalDependencies를 통한 플랫폼별 바이너리#

설정 종속성은 esbuild나 swc 같은 도구에서 사용하는 것과 동일한 패턴으로 optionalDependencies를 통해 플랫폼별 바이너리를 제공할 수 있습니다. 각 플랫폼 바이너리 패키지는 os, cpu 및/또는 libc 필드로 지원하는 플랫폼을 선언하며, pnpm은 현재 호스트와 일치하는 변형만 설치합니다. 일치하는 바이너리는 글로벌 가상 스토어에서 상위 설정 종속성 옆에 심볼릭 링크되므로, 설정 종속성 내부에서 require('my-config-platform-arch')가 런타임에 해석됩니다.

해당 env lockfile은 호스트 플랫폼과 관계없이 모든 플랫폼 변형을 기록하므로, lockfile은 여러 머신 간에 이식 가능한 상태로 유지됩니다.

optionalDependencies의 각 항목은 정확한 버전(예: "1.2.3")으로 선언해야 합니다 — 범위("^1.0.0", "~1.0.0")와 태그("latest")는 거부됩니다. 이를 통해 설정 종속성 설치의 재현성이 유지됩니다: integrity로 고정된 상위 패키지의 경우, 해석된 하위 종속성이 머신마다 달라질 수 없습니다.

사용#

훅에서 사용하는 종속성 설치하기#

설정 종속성은 .pnpmfile.mjs의 훅이 로드되기 전에 설치되므로, 설정 패키지에서 로직을 가져올 수 있습니다.

예시:

.pnpmfile.mjs
import { readPackage } from '.pnpm-config/my-hooks'

export const hooks = {
  readPackage
}

동적으로 pnpm 설정 업데이트하기#

updateConfig 훅을 사용하면 설정 종속성을 이용해 pnpm 설정을 동적으로 업데이트할 수 있습니다.

예를 들어, 다음 pnpmfile은 pnpm 설정에 새 catalog 항목을 추가합니다:

@myorg/pnpm-plugin-my-catalogs/pnpmfile.mjs
export const hooks = {
  updateConfig (config) {
    config.catalogs.default ??= {}
    config.catalogs.default['is-odd'] = '1.0.0'
    return config
  }
}

이를 설정 종속성으로 설치하면:

pnpm add --config @myorg/pnpm-plugin-my-catalogs

다음을 실행할 수 있습니다:

pnpm add is-odd@catalog:

이렇게 하면 is-odd@1.0.0이 설치되고 package.json에 다음이 추가됩니다:

{
  "dependencies": {
    "is-odd": "catalog:"
  }
}

이를 통해 여러 프로젝트에서 중앙 집중식 설정과 종속성 버전을 쉽게 유지 관리하고 공유할 수 있습니다.

패치 파일 불러오기#

설정 종속성 내부에 저장된 patch files를 참조할 수 있습니다.

예시:

pnpm-workspace.yaml
configDependencies:
  my-patches: "1.0.0"
patchedDependencies:
  react: "node_modules/.pnpm-config/my-patches/react.patch"