어느 순간부터 pnpm을 이용한 monorepo 레포에서 pnpm install이 안되기 시작했습니다.
분명 정상적을 동작하던 명령어인데 동작을 안하니 아리송하기도 하고 멘붕이 서서히 오기 시작했습니다.
이번 포스팅은 한동안 저를 공포에 빠뜨린 ERR_PNPM_FETCH_404 문제를 해결한 기록입니다.
이 문제를 해결하기 위해 시도해본 첫번째 방법은 node_modules를 모두 삭제해보는 것이었습니다.
패키지 설치의 문제였기 때문에 혹여나 node_modules에서 문제가 생긴 것이 아닐까 하는 것이었습니다만,
여전히 패키지 설치는 되지 않았습니다.
npx npKill // node_modules를 삭제하기 위해 사용했던 명령어입니다.
node_modules의 문제가 아니라면, 혹시 lock파일의 문제가 아닐까 라는 생각이 들었습니다.
얕은 지식으로나마 node_modules를 설치 할 때 pnpm-lock.yaml 파일을 참조하여 설치한다고 들었기 때문에 해당 파일에 문제가 있다면 패키지 설치에도 문제가 있을 것 같았기 때문입니다.
하지만 여전히 패키지 설치는 되지 않았습니다.
이 두 가지 방법을 써도 안된다면, 가장 단순하고 가장 쉬운 방법인 repository 폴더를 지우고 다시 깔아보자! 라는 생각이 들었습니다.
상당수의 프로그래밍 문제는 지우고 다시 설치하면 해결되었기 때문에 이 방법도 꽤 괜찮을 것 같다는 생각이 들었습니다.
하지만 이 방법을 시도했음에도 여전히 패키지는 설치되지 않았습니다.
그렇게 이 문제를 해결하기 위해 여기저기 구글링을 하던 도중 저와 비슷한 문제가 있었던 분의 글을 발견했습니다.
https://github.com/pnpm/pnpm/issues/8036
이 글의 댓글에 따르면 link-workspace-packages
가 문제였던 것이었습니다. 저는 제가 사용하는 툴들은 가능한 최신 버전을 설치하는 습관이 있는데, 최근 pnpm의 버전을 업그레이드 하면서 link-workspace-packages
의 설정이 false로 바뀌었기 때문에 pnpm에서 모노레포의 workspace를 제대로 인지하지 못하고 npm registry에서 모노레포의 패키지를 찾았던 것이었습니다.
댓글의 해결 방법대로 루트 디렉토리에 .npmrc
파일을 만들고 거기에 link-workspace-packages=true
설정을 입력하니 문제가 해결되었습니다.
pnpm을 업그레이드 한 이후에, 혹은 갑자기 pnpm install이 안되는, 저와 같은 문제를 겪으실 분들이 있을 것 같습니다. 부디 이 포스팅이 그분들께 도움이 되길 바랍니다.