개발 이슈

sharp: Cannot find module '../build/Release/sharp-linuxmusl-x64.node'

주인장 꼬비 2023. 6. 26. 23:34

mac (intel)에서는 멀쩡히 설치되고 돌아가던 sharp 라이브러리가 dev 서버에 배포하니 패키지 설치가 되지 않았다.

 

대략 에러로그는 다음과 같았다.

Something went wrong installing the "sharp" module
Cannot find module '../build/Release/sharp-linuxmusl-x64.node'
...
Possible solutions:
- Install with verbose logging and look for errors: "npm install --ignore-scripts=false --foreground-scripts --verbose sharp"
- Install for the current linuxmusl-x64 runtime: "npm install --platform=linuxmusl --arch=x64 sharp"
- Consult the installation documentation: https://sharp.pixelplumbing.com/install

 

sharp 라이브러리는 OS의 바이너리를 이용한다. 그렇기 때문에 OS에 따라 설치되는 모듈이 다른데 이것 때문에 맥에서는 설치가 되던 것이 dev에 반영했을때 말썽을 부린 것이다. 해결방법은 간단하게 설명하자면 cross-platform을 지원하게 하면 된다. sharp 공식문서에서 어느정도 설명이 되어있지만 npm을 쓰고 있어서 yarn 을 사용하는 경우에는 그대로 사용할 수 없다.

 

나같은 경우엔 Dockerfile을 일부 수정하여 해당 문제를 해결하였다.

 

우선 수정 전의 Dockerfile은 대략 다음과 같았다.

...
COPY package.json package.json
COPY yarn.lock yarn.lock
RUN yarn install --immutable --immutable-cache --check-cache

# Build
COPY src src
COPY tsconfig.json tsconfig.json
RUN yarn tsc
...

 

그리고 Dockerfile은 다음과 같이 수정하였다.

...
COPY package.json package.json
COPY yarn.lock yarn.lock
RUN yarn install --immutable --immutable-cache --check-cache

# Add
RUN SHARP_IGNORE_GLOBAL_LIBVIPS=1 npm_config_arch=x64 npm_config_platform=linuxmusl yarn add sharp@0.32.1

# Build
COPY src src
COPY tsconfig.json tsconfig.json
RUN yarn tsc
...

 

SHARP_IGNORE_GLOBAL_LIBVIPS: 전역 libvips 라이브러리를 무시하고 sharp 패키지에 내장된 libvips를 사용하도록 설정하는 옵션이다. sharp 패키지의 독립성과 호환성을 보장하기 위해 추가했다.

npm_config_arch=x64: npm에서 사용되는 구조(architecture)를 x64로 설정했다. 정확한 이해는 못했는데 대충 sharp 패키지를 해당 구조에 맞게 설치하기 위한 옵션이다.

npm_config_platform=linuxmusl: sharp 패키지를 linux로 설치하는 옵션이다. (platform 지정) linux가 아니라 linuxmusl 로 설치했다.(alpline linux를 사용하고 있다.)

 

그리고 패키지는 0.32.1 로 고정해두었다. 

 

 

참고할만한 자료

https://github.com/lovell/sharp/issues/3599

https://github.com/lovell/sharp/issues/2340

https://v3.leedo.me/image-resize-by-cloudfront-lambda-edge

https://inpa.tistory.com/entry/NODE-%F0%9F%93%9A-Sharp-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%A6%AC%EC%82%AC%EC%9D%B4%EC%A7%95-%EC%9B%8C%ED%84%B0%EB%A7%88%ED%81%AC-%EB%84%A3%EA%B8%B0