patch-package

배경

RN 개발 과정에서 내가 사용하는 라이브러리의 코드를 수정하고 싶을 때가 있다. 버그라면 수정을 기다리거나 리포팅을 할 수도 있을 것이다. 하지만, 내게만 필요한 수정이라면 기약하기 어려울 수도 있다.

RN의 의존성들은 /node_modules/ 내의 소스코드를 포함해 다운로드 된다. 이를 수정 후에 빌드하면 내 코드에도 반영된다. 하지만, 이런 방식의 수정은 내 로컬에만 적용되므로 새로 다른 프로젝트를 셋업할 때마다 같은 수작업을 반복해야 할 것이다.

더 나은 방법은 없을까?

더 자세히

이런 경우에 도움이 되는 도구가 patch-package다. patch-package의 사용법은 직관적이고 인터넷에 글도 많다. 여기서는 사용법보다는 어떻게 돌아가는 것인지 더 살펴보자.

어떻게 돌아가는지 살펴보기 전에, 파일을 수정하면 다른 사람에게 어떻게 전달할 수 있을지 생각해보자. Git과 같은 형상관리 도구를 사용한다면, 같은 repository를 바라보는 사람끼리는 commit을 통해 공유할 수 있다. 혹은, 소스 코드를 통채로 압축해서 공유하거나 메신저로 코드를 잘라붙일 수도 있겠다.

Git은 commit 외에 파일로 전달하는 방법도 제공한다. patch는 변경사항을 파일로 만들어, 다른사람에게 메일 등으로 보낼 수 있도록 해준다. 소스코드가 인터넷 상에 관리되지 않거나, 관리되지만 내가 권한이 없을 경우에 사용할 수 있을 것이다.

➜  app git:(develop) ls patches/
lottie-react-native+5.1.4.patch

patch-package는 이런 git의 patch를 활용해 수정된 라이브러리의 변경된 사항을 위 그림처럼, 내 프로젝트 내 /patches 폴더 안에 저장하다. 이 파일은 형상관리 도구들을 통해 인터넷으로 다른 사람과 공유할 수 있다. 이를 받은 다른 사람은 “yarn postinstall” 단계에서 자동으로 /node_modules/ 폴더 내 특정 라이브러리에 수정이 적용된다.

patch-package는 이를 통해 /node_modules/ 를 직접 수정하거나 변경 사항을 매번 설명해야하는 번거로움을 없앴다. 그리고, git의 patch를 활용했기 때문에 git의 명령어를 통해서도 patch를 적용하는 부가적인 이점도 있다.

물론, 버그라면 라이브러리가 수정되어야 한다. 나만의 요구사항이라면 라이브러리 권장사항대로 써야 할 것이다. 하지만, 프로젝트 소개 처럼 긴급할 때 band-aid로서 효율적으로 써보자.

그 밖에

  • patch 생성 과정에서 에러가 발생했다면, package.json 내의 “patch-package” 버전을 올려보자.
  • yarn patch-package가 안된다면 npx patch-package 를 실행해보자. 반대도 마찬가지다.
  • “yarn install”에서는 /node_modules/ 폴더 없이 package.json만 있는 셋업 단계에서 1회만 patch가 적용된다. 반복적으로 적용하고 싶다면, “yarn postinstall”을 실행하자. 왜 postinstall 단계에서 적용되는지 궁금하다면 이 글을 읽어보자.
  • patch 파일은 /patches 폴더에 저장된다. 이 파일이 git에 commit이 되어야, 이 repository를 받은 다른 사람이 patch를 적용할 수 있다.

참조

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.