본문으로 건너뛰기
버전: 6.x

.pnpmfile.cjs

pnpm을 사용하면 특수 기능 (후크)을 통해 설치 프로세스에 직접 연결할 수 있습니다. 후크는 .pnpmfile.cjs라는 파일에서 선언할 수 있습니다.

기본적으로 .pnpmfile.cjs 은 lockfile과 같은 디렉터리에 있어야 합니다. 예를 들어, 공유 lockfile이 있는 워크스페이스에서 .pnpmfile.cjs는 모노레포의 루트에 있어야 합니다.

후크

요약

후크 함수처리사용
hooks.readPackage(pkg, context): pkgpnpm이 의존성 패키지 매니페스트를 파싱한 후에 호출됩니다.의존성의 package.json을 변경할 수 있습니다.
hooks.afterAllResolved(lockfile, context): lockfile의존성이 해결된 후에 호출됩니다.lockfile을 변경할 수 있습니다.

hooks.readPackage(pkg, context): pkg | Promise<pkg>

파싱 후 또는 해결 전에 의존성의 package.json을 변경할 수 있습니다. 이러한 변형은 파일시스템에 저장되지 않지만, lockfile에서 해결되는 내용과 이에 따라 설치되는 내용에 영향을 줍니다.

수정하려는 의존성을 이미 해결했다면, pnpm-lock.yaml 을 삭제해야 합니다.

인수

  • 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>

Added in: v1.41.0

Allows you to mutate the lockfile output before it is serialized.

인수

  • lockfile - pnpm-lock.yaml로 직렬화되는 lockfile 해결 객체입니다.
  • context - 단계에 대한 컨텍스트 객체입니다. #log(msg) 메서드는 단계에 대한 디버그 로그를 사용할 수 있도록 합니다.

사용 예

.pnpmfile.cjs
function afterAllResolved(lockfile, context) {
// ...
return lockfile
}

module.exports = {
hooks: {
afterAllResolved
}
}

알려진 제약사항

There are none - anything that can be done with the lockfile can be modified via this function, and you can even extend the lockfile's functionality.

관련 구성

ignore-pnpmfile

Added in: v1.25.0

  • 기본값: false
  • 유형: Boolean

.pnpmfile.cjs will be ignored. Useful together with --ignore-scripts when you want to make sure that no script gets executed during install.

pnpmfile

Added in: v1.39.0

  • 기본값: .pnpmfile.cjs
  • 유형: path
  • 예: .pnpm/.pnpmfile.cjs

The location of the local pnpmfile.

global-pnpmfile

Added in: v1.39.0

  • Default: null
  • 유형: path
  • 예: ~/.pnpm/global_pnpmfile.cjs

The location of a global pnpmfile. A global pnpmfile is used by all projects during installation.

note

It is recommended to use local pnpmfiles. Only use a global pnpmfile if you use pnpm on projects that don't use pnpm as the primary package manager.