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
'개발 이슈' 카테고리의 다른 글
Auto increment max 때문에 주말에 6시간 일했다 - 1 (0) | 2024.05.19 |
---|---|
개발관련 문서 모음 (0) | 2023.07.23 |
AWS EKS 클러스터에 접속해서 특정 작업 또는 정보를 확인하기 (0) | 2023.05.13 |
The project you were looking for could not be found or you don't have permission to view it. 에러 (0) | 2023.05.08 |
API를 만들때는 속도도 중요하지만 Response size도 생각하자 (0) | 2023.04.11 |