package-lock 버전과 postinstall

박기완·2021년 5월 18일
1

CI에서 Sentry 바이너리 파일을 찾을 수 없다는 에러를 마주했다.

Sentry CLI Plugin: spawn /app/node_modules/@sentry/cli/sentry-cli ENOENT

Sentry CLI가 사용하는 바이너리 파일(sentry-cli)을 찾지 못했다는 에러이다. 해당 파일은 @sentry/cli를 설치할 때 postinstall 스크립트로 만들어진다. 모종의 이유로 postinstall 스크립트가 돌지 않은 것이다.
npm@7부터 package-lock에 패키지의 hasInstallScript 속성이 true여야 패키지의 postinstall을 돌리게 되었다. 그런데 이 속성은 package-lock 버전 2부터 추가되었다. npm@6으로 패키지를 설치했다면 해당 속성이 없는 것이다. 그런데 npm@7으로 단순 설치(npm install)는 hasInstallScript를 추가하지 않는다. 패키지를 직접 제거했다가 다시 설치하는 과정을 거쳐야 해당 속성을 추가한다.
정리하면, npm@6을 사용해 postinstall을 사용하는 패키지를 설치한 다음 npm@7을 사용하게 되면 postinstall 스크립트가 작동하지 않아서 문제가 생길 수 있다는 것이다. 그리고 이 문제는 hasInstallScript 속성이 없어서 생기는 문제이며, 해당 속성을 넣어주기 위해 postinstall을 사용하는 패키지를 삭제 후 재설치하여 해결할 수 있다.

0개의 댓글