설정 종속성
설정 종속성을 사용하면 여러 프로젝트에서 설정 파일, 설정, 훅을 공유하고 중앙에서 관리할 수 있습니다. 설정 종속성은 모든 일반 종속성("dependencies", "devDependencies", "optionalDependencies")보다 먼저 설치되므로, 사용자 정의 훅, 패치, 카탈로그 항목을 설정하는 데 적합합니다.
설정 종속성을 사용하면 모든 훅, 설정, 패치, 오버라이드, 카탈로그, 규칙을 한 곳에서 관리하고 여러 저장소에서 사용할 수 있습니다.
설정 종속성의 이름이 pnpm-plugin-* 또는 @*/pnpm-plugin-* 패턴을 따르는 경우, pnpm은 해당 루트에서 pnpmfile.cjs를 자동으로 로드합니다.
설정 종속성을 추가하는 방법#
설정 종속성은 pnpm-workspace.yaml에 정의되며, 정확한 버전과 integrity 체크섬을 사용하여 설치해야 합니다.
예를 들어, pnpm add --config my-configs를 실행하면 pnpm-workspace.yaml에 다음 항목이 추가됩니다:
configDependencies:
my-configs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
중요:
- 설정 종속성은 자체 종속성을 가질 수 없습니다.
- 설정 종속성은 라이프사이클 스크립트(
preinstall,postinstall등)를 정의할 수 없습니다.
사용#
빌드 허용 종속성 목록 로드하기#
onlyBuiltDependenciesFile 설정을 사용하여 빌드가 허용된 패키지 이름 목록을 로드할 수 있습니다.
설정 종속성 내부의 allow.json 파일 예시:
[
"@airbnb/node-memwatch",
"@apollo/protobufjs",
...
]
워크스페이스 설정:
configDependencies:
'@myorg/trusted-deps': 0.1.0+sha512-IERT0uXPBnSZGsCmoSuPzYNWhXWWnKkuc9q78KzLdmDWJhnrmvc7N4qaHJmaNKIusdCH2riO3iE34Osohj6n8w==
onlyBuiltDependenciesFile: node_modules/.pnpm-config/@myorg/trusted-deps/allow.json
훅에서 사용하는 종속성 설치하기#
설정 종속성은 .pnpmfile.cjs의 훅이 로드되기 전에 설치되므로, 설정 패키지에서 로직을 가져올 수 있습니다.
예시:
const { readPackage } = require('.pnpm-config/my-hooks')
module.exports = {
hooks: {
readPackage
}
}
동적으로 pnpm 설정 업데이트하기#
updateConfig 훅을 사용하면 설정 종속성을 이용해 pnpm 설정을 동적으로 업데이트할 수 있습니다.
예를 들어, 다음 pnpmfile은 pnpm 설정에 새 catalog 항목을 추가합니다:
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를 참조할 수 있습니다.
예시:
configDependencies:
my-patches: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
patchedDependencies:
react: "node_modules/.pnpm-config/my-patches/react.patch"