node modules 패키지 수정하기

윤다은·2022년 12월 5일
0
post-thumbnail

라이브러리 사용 이유

우리가 라이브러리를 쓰는 이유에는 여러가지가 있습니다.
대표적인 세 가지를 꼽자면 다음과 같습니다.
1. 개발 시간을 단축할 수 있습니다.
2. 다수의 애플리케이션에 적용할 수 있습니다.
3. 비슷한 고민과 해결책을 찾기 수월합니다.

라이브러리는 은탄환일까?

처음에는 개발 시간을 단축해서 좋을 수 있지만 꼭 그렇지만도 않습니다. 장점에 못지 않은 단점들도 존재합니다.
1. 기능과 목적에 비해 라이브러리의 용량이 커 번들 사이즈를 늘릴 수 있다.
2. 해당 라이브러리를 직접 수정해야 할 수도 있다.
3. 신뢰도가 떨어진다.
4. deprecated될 수 있다.

이 단점 중 저는 2번에 집중하려 합니다. 종종 개발하다가 라이브러리를 커스텀 해서 사용해야할 경우가 있습니다. 라이브러리 코드에 바로 PR을 보내 제안해 볼 수 있지만, 배포날에 맞추려다 보면 일단 수정이 필요한 경우도 있습니다. 이 때 사용할 수 있는 것이 바로 patch-package입니다.

patch-package란?

patch-packagenode modules에 있는 패키지를 수정하여 배포 단계에 나갈 수 있도록 하고, git을 통해 변경 사항도 추적할 수 있습니다.

patch-package 사용

일단 공식 문서에 따라 patch-package를 사용합니다.
저는 패칭할 라이브러리로 react-native-image-crop-picker를 예시로 들어보겠습니다.

프로젝트에 라이브러리를 설치하고 동작을 확인해봅니다.

기존에 이미 패키지 파일이 있다면 지워주세요!

라이브러리를 직접 수정해보자

react-native-image-crop-picker 라이브러리는 리액트 네이티브에서 사용할 수 있는 이미지 편집 라이브러리 입니다. 이 라이브러리의 기본적인 동작은 아래와 같습니다.

  1. 이 라이브러리는 기본적으로 크롭할 이미지의 width, height를 기본값으로 받습니다.
  2. widthheight를 기준으로 크롭할 사각형의 비율이 정해집니다.

이 라이브러리를 통해 실행해보면 iOS에선 다음과 같이 나타납니다.

이미지 크롭 라이브러리를 iOS에서 실행했을 때 사진

곱창 포스팅 전에 가려고 찍어둔 것이 있어서 찍어놨습니다..ㅋㅋㅋㅋ 여기 맛있어요!

제가 원하는 동작은 여기서 처음에 크롭하는 사각형 영역이 전체 영역이었으면 좋겠습니다. 이후의 크롭 영역은 사용자가 알아서 조정하도록 합니다. 이 라이브러리는 리액트 네이티브의 라이브러리이기 때문에 iOS, Android에서 해당 코드를 각각 찾아 수정합니다.

💡 라이브러리를 수정할 땐 이로 인한 side-effect가 없는 지를 생각하는 것이 좋습니다. 만약 widthheight에 따라 크롭 사각형의 비율이 조정되지 않는다면 동료들이 사용할 때 당황스러울 수 있습니다.
저는 특정한 값을 넣을 때만 패치된 동작이 돌아가도록 했습니다. 이렇게 하면 기존의 코드에 영향을 최소화 할 수 있습니다.

이제 npx patch-package (패칭 라이브러리 이름)을 실행합니다. 이렇게 하면 /patches하단에 새로운 패치 파일이 생성됩니다. 이 패치 파일 안에는 라이브러리의 어떤 내용이 수정되었는 지 적혀있습니다.

이제 프로젝트를 실행하면 수정한 내용이 반영되어 있는 것을 확인할 수 있습니다.

profile
코끼리가 코로 걸어다니는 코드를 지양합니다.

0개의 댓글