.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
을 삭제해야 합니다.
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
을 통해 의존성의 매니페스트에서 scripts
필드를 제거해도 pnpm이 의존성을 구축하는 것을 방지하지 못합니다. 의존성을 빌드할 때, pnpm은 패키지의 아카이브에서 패키지의 package.json
를 읽으며, 이는 후크의 영향을 받지 않습니다. 패키지의 빌드를 무시하려면, pnpm.neverBuiltDependencies 필드를 사용하세요.
hooks.afterAllResolved(lockfile, context): lockfile | Promise<lockfile>
직렬화되기 전에 lockfile 결과를 변경할 수 있습니다.
인수
lockfile
-pnpm-lock.yaml
로 직렬화되는 lockfile 해결 객체입니다.context
- 단계에 대한 컨텍스트 객체입니다.#log(msg)
메서드는 단계에 대한 디버그 로그를 사용할 수 있도록 합니다.
사용 예
function afterAllResolved(lockfile, context) {
// ...
return lockfile
}
module.exports = {
hooks: {
afterAllResolved
}
}
알려진 제약사항
lockfile로 할 수 있는 모든 것은 이 함수를 통해 수 있으며, lockfile의 기능을 확장할 수도 있습니다.
관련 구성
ignore-pnpmfile
- 기본값: false
- 유형: Boolean
.pnpmfile.cjs
은 무시됩니다. 설치 중에 스크립트가 실행되지 않도록 하려는 경우, --ignore-scripts
과 함께 사용하면 유용합니다.
pnpmfile
- 기본값: .pnpmfile.cjs
- 유형: path
- 예: .pnpm/.pnpmfile.cjs
로컬 pnpmfile의 위치입니다.
global-pnpmfile
- 기본값: null
- 유형: path
- 예: ~/.pnpm/global_pnpmfile.cjs
전역 pnpmfile의 위치입니다. 전역 pnpmfile은 설치하는 동안 모든 프로젝트에서 사용됩니다.
로컬 pnpmfile를 사용하는 것이 좋습니다. pnpm을 기본 패키지 관리자로 사용하지 않는 프로젝트에서 pnpm을 사용하는 경우에만 전역 pnpmfile을 사용하십시오.