npm registry와 npm cache, 그리고 배포 자동화

김병호·2024년 6월 18일
0

Agenda

  • 별도 레지스트리 사용이 우선인가, CI/CD가 우선인가

Detail

  • .npmrc 파일을 정의하고 사용한다면, 별도 npm 레지스트리를 등록할 수 있다.
    • npm install을 진행할 때 origin(https://registry.npmjs.org/)으로부터 패키지를 다운로드하지 않고 레지스트리 값을 사용한다.
    • 별도 npm 레지스트리를 사용하면, 원하는 버전의 패키지를 설치하지 못할 수 있다.
      • 다행히, npm install 시에는 offline 캐시를 사용한다. ( ~/.npm 경로에 저장 됨)
      • 다시 말해서 위 스샷의 에러는 npm cache clean 이후에 npm install을 수행할 때, 봉착할 수 있다.
  • 빌드/배포 파이프라인에서 npm cache clean && npm install을 수행한다고 가정하자.
    - 별도 레지스트리에 없는 패키지를 설치하려면 에러가 나서, 파이프라인이 멈춘다.

해결방법

  1. npm cache clean 을 하지 않는다.

    • 대개 할 필요가 없다. 보안 문제가 있거나 굳이 새로운 버전이 필요할 때만 사용
    • 젠킨스나 git pipeline등을 사용할 때도 마찬가지
  2. 별도 레지스트리를 늘 최신화되도록 만든다.

    • 아니지, 이보다는 .npmrc 파일에 대한 컨벤션이 필요하다.
      • 별도 레지스트리 사용 목적에 부합하는 패키지만 설치하고, 그 밖의 의존성은 외부로부터 가져오도록 하는 예시
      registry=https://registry.npmjs.org/
      @myorg:registry=http://abc.def.com/nexus/npm-public/
  3. npm install 단계에서 fallback 스크립트를 정의한다.

    • 별도 쉘 스크립트를 정의한 뒤 사용하거나, 아래와 같이 package.json에 script를 정의할 수 있다.
      npm install || {
      # 실패할 경우 npm 공식 registry에서 패키지 설치 시도
      echo "Failed to install from private registry, falling back to public registry"
      npm config set registry https://registry.npmjs.org/
      npm install
      }

0개의 댓글