npm registry 를 찾지 못하는 이슈
발생일: 2021.02.22
키워드: yarn config, npm config, registry, npmrc, private registry
문제:
갑자기 전체 태스크가 실패했고, 건너자리 A가 코드 원복까지 했는데도 계속 지속됐다.
에러 문구를 보니 특정 npm 모듈의 리파지터리를 찾지 못하는 문제다.
node_modules 디렉토리를 날리고 새로 설치해도 동일한 문제가 발생했다고 한다.
이번에 npm registry 를 변경하는 작업을 준비하고 있었는데,
새로 설치된 모듈이 아직 준비되지 않은 새 레지스트리를 바라본 것이 문제였다.
왜 그런걸까?
해결책:
이번에 옮기려던 레지스트리는 도메인과 권한이 기존과 모두 달랐다.
예를 들어, https://old_registry.example.com 에서 https://new_registry.example.com 으로 옮기는 셈이다.
개발자들이 레지스트리 설정을 깜빡하는 경우가 있어서,
아래처럼 package.json 의 preinstall 스크립트로 config 를 설정하는 걸 미리 넣어뒀었다.
[package.json]
{
...
"preinstall": "yarn config set registry https://old_registry.example.com"
...
}
스크립트가 있어서 문제될 게 없다고 생각했는데,
문제는 테스트하던 개발자가 로컬 디바이스에서 CLI로 레지스트리를 설정했기 때문이었다.
$ npm config set registry https://new_registry.example.com
npm 의 설정이 yarn 의 설정에 우선한 것이 문제였다.
다른 포스트를 찾아보니, config 에 대한 우선순위가 아래처럼 된다고 한다.
local npmrc > global npmrc > local yarnrc
여튼, 우리는 아래처럼 정리했다.
- preinstall 에서 처리하던 설정은 모두 제거
- 레지스트리는 .npmrc 파일에 정의
- 각 개발자들의 로컬 npm config 는 정리
.npmrc 파일에 레지스트리를 추가하려면, 파일을 생성해서 아래 내용을 넣어주면 된다.
registry=https://npm.bar.com
논의:
참고로 우리는 버다씨오(verdaccio) 를 사용해서 레지스트리를 구축해뒀었다.
헌데, 버다씨오에서 해주던 프라이빗 리파지터리 기능을 이제는 깃헙에서도 할 수 있다!
우리 팀의 레지스트리도 깃헙으로 다 옮겼다!
- 깃헙 패키지: github.com/features/packages
참고:
yarnrc, npmrc 우선순위: qkrdudwls99.medium.com/priority-of-yarnrc-npmrc-a47dc01797e6