pnpm patch <pkg>

패칭을 위한 패키지를 준비합니다(Yarn의 유사한 명령에서 영감을 받음).

이 명령은 마음대로 편집할 수 있도록 임시 디렉토리에 패키지를 추출합니다.

변경 작업을 마치면 pnpm patch-commit <path>를 실행하여(<path>는 받은 임시 디렉터리입니다) 패치 파일을 생성하고 patchedDependencies 필드를 통해 최상위 매니페스트에 등록하세요.

사용법:

pnpm patch <pkg name>@<version>

참고

패키지의 종속성을 변경하려는 경우, 패치로 해당 패키지의 package.json 파일을 수정하지 마세요. 종속성을 재정의하려면 overrides 또는 패키지 훅을 사용하세요.

옵션#

--edit-dir <dir>#

패치가 필요한 패키지는 이 디렉터리로 추출됩니다.

--ignore-existing#

패치할 때 기존에 존재하는 패치 파일을 무시합니다.

환경설정#

patchedDependencies#

이 필드는 pnpm patch-commit을 실행할 때 자동으로 추가/업데이트됩니다. 다음과 같은 딕셔너리를 사용하여 종속성에 대한 패치를 정의합니다:

  • 키: 정확한 버전, 버전 범위 또는 이름만 있는 패키지 이름입니다.
  • 값: 패치 파일의 상대 경로입니다.

예시:

patchedDependencies:
  express@4.18.1: patches/express@4.18.1.patch

종속성은 버전 범위로 패치할 수 있습니다. 우선순위는 다음과 같습니다:

  1. 정확한 버전(가장 높은 우선순위)
  2. 버전 범위
  3. 이름만 지정한 패치(재정의하지 않는 한 모든 버전에 적용됨)

특수한 경우로, 버전 범위 *는 이름만 지정한 패치처럼 동작하지만 패치 실패를 무시하지 않습니다.

예시:

patchedDependencies:
  foo: patches/foo-1.patch
  foo@^2.0.0: patches/foo-2.patch
  foo@2.1.0: patches/foo-3.patch
  • patches/foo-3.patch는 foo@2.1.0에 적용됩니다.
  • patches/foo-2.patch는 ^2.0.0과 일치하는 모든 foo 버전에 적용되며, 2.1.0은 예외입니다.
  • patches/foo-1.patch는 그 외 모든 foo 버전에 적용됩니다.

겹치는 버전 범위는 피하세요. 하위 범위를 특수하게 처리해야 한다면 더 넓은 범위에서 명시적으로 제외하세요.

예시:

patchedDependencies:
  # Specialized sub-range
  "foo@2.2.0-2.8.0": patches/foo.2.2.0-2.8.0.patch
  # General patch, excluding the sub-range above
  "foo@>=2.0.0 <2.2.0 || >2.8.0": patches/foo.gte2.patch

대부분의 경우 정확한 버전을 정의하는 것만으로 더 넓은 범위를 재정의하기에 충분합니다.

allowUnusedPatches#

추가된 버전: v10.7.0 (이전 이름: allowNonAppliedPatches)

  • 기본값: false
  • 유형: Boolean

true인 경우 patchedDependencies 필드의 일부 패치가 적용되지 않은 경우에도 설치가 실패하지 않습니다.

patchedDependencies:
  express@4.18.1: patches/express@4.18.1.patch
allowUnusedPatches: true

참고

버전 v11에서는 패치 적용 실패 시 항상 오류가 발생합니다 — ignorePatchFailures 설정은 제거되었습니다. 그룹의 여러 패치를 적용할 때 하나가 실패해도 나머지 패치는 계속 시도됩니다; 모든 패치 오류는 마지막에 함께 보고됩니다.