.pnpmfile.cjs
pnpm을 사용하면 특수 기능 (후크)을 통해 설치 프로세스에 직접 연결할 수 있습니다. 후크는 .pnpmfile.cjs
라는 파일에서 선언할 수 있습니다.
기본적으로 .pnpmfile.cjs
은 lockfile과 같은 디렉터리에 있어야 합니다. 예를 들어, 공유 lockfile이 있는 워크스페이스에서 .pnpmfile.cjs
는 모노레포의 루트에 있어야 합니다.
후크
요약
후크 함수 | 처리 | 사용 |
---|---|---|
hooks.readPackage(pkg, context): pkg | pnpm이 의존성 패키지 매니페스트를 파싱한 후에 호출됩니다. | 의존성의 package.json 을 변경할 수 있습니다. |
hooks.afterAllResolved(lockfile, context): lockfile | 의존성이 해결된 후에 호출됩니다. | lockfile을 변경할 수 있습니다. |
hooks.readPackage(pkg, context): pkg | Promise<pkg>
파싱 후 또는 해결 전에 의존성의 package.json
을 변경할 수 있습니다. 이러한 변형은 파일시스템에 저장되지 않지만, lockfile에서 해결되는 내용과 이에 따라 설치되는 내용에 영향을 줍니다.
수정하려는 의존성을 이미 해결했다면, pnpm-lock.yaml
을 삭제해야 합니다.
tip
If you need changes to package.json
saved to the filesystem, you need to use the pnpm patch
command and patch the package.json
file. This might be useful if you want to remove the bin
field of a dependency for instance.
인수
pkg
- 패키지의 매니페스트. 레지스 트리 응답 또는package.json
컨텐츠입니다.context
- 단계에 대한 컨텍스트 객체입니다.#log(msg)
메서드는 단계에 대한 디버그 로그를 사용할 수 있도록 합니다.
사용
.pnpmfile.cjs
의 예제 (의존성의 의존성 변경):
function readPackage(pkg, context) {
// Override the manifest of foo@1.x after downloading it from the registry
if (pkg.name === 'foo' && pkg.version.startsWith('1.')) {
// Replace bar@x.x.x with bar@2.0.0
pkg.dependencies = {
...pkg.dependencies,
bar: '^2.0.0'
}
context.log('bar@1 => bar@2 in dependencies of foo')
}
// This will change any packages using baz@x.x.x to use baz@1.2.3
if (pkg.dependencies.baz) {
pkg.dependencies.baz = '1.2.3';
}
return pkg
}
module.exports = {
hooks: {
readPackage
}
}
알려진 제약 사항
readPackage