설정 종속성

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

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

설정 종속성의 이름이 pnpm-plugin-* 또는 @*/pnpm-plugin-* 패턴을 따르는 경우, pnpm은 해당 루트에서 pnpmfile.cjs를 자동으로 로드합니다.

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

설정 종속성은 pnpm-workspace.yaml에 정의되며, 정확한 버전과 integrity 체크섬을 사용하여 설치해야 합니다.

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

pnpm-workspace.yaml
configDependencies:
  my-configs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="

중요:

  • 설정 종속성은 자체 종속성을 가질 수 없습니다.
  • 설정 종속성은 라이프사이클 스크립트(preinstall, postinstall 등)를 정의할 수 없습니다.

사용#

빌드 허용 종속성 목록 로드하기#

onlyBuiltDependenciesFile 설정을 사용하여 빌드가 허용된 패키지 이름 목록을 로드할 수 있습니다.

설정 종속성 내부의 allow.json 파일 예시:

allow.json
[
  "@airbnb/node-memwatch",
  "@apollo/protobufjs",
  ...
]

워크스페이스 설정:

pnpm-workspace.yaml
configDependencies:
  '@myorg/trusted-deps': 0.1.0+sha512-IERT0uXPBnSZGsCmoSuPzYNWhXWWnKkuc9q78KzLdmDWJhnrmvc7N4qaHJmaNKIusdCH2riO3iE34Osohj6n8w==
onlyBuiltDependenciesFile: node_modules/.pnpm-config/@myorg/trusted-deps/allow.json

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

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

예시:

.pnpmfile.cjs
const { readPackage } = require('.pnpm-config/my-hooks')

module.exports = {
  hooks: {
    readPackage
  }
}

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

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

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

@myorg/pnpm-plugin-my-catalogs/pnpmfile.cjs
module.exports = {
  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+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
patchedDependencies:
  react: "node_modules/.pnpm-config/my-patches/react.patch"