2020 년부터 CI / CD 파이프 라인에서 Node.js 모듈 설치 속도를 높이는 방법

2020/3/28 업데이트 : 추가 pnpm

프로젝트에서 Node.js를 사용하는 경우 CI / CD 파이프 라인에서 node_modules 설치를 관리해야합니다. 당신은 사용할 수 있습니다 npm install, npm ci, yarn installpnpm install,하지만 그렇게하는 가장 빠른 방법은 여전히 우리가 해답을 찾고있는 질문이다. 이 이야기에서 나는 최종 답을 찾기 위해 내가 아는 모든 가능성을 실험하고 싶습니다.

TL; DR

급한 경우해야 할 일은 다음과 같습니다.

  1. stdout 출력 비활성화
  2. 캐시 된 node_modules 사용
  3. 사용하다 --prefer-offline
  4. 전역 캐시 사용 ( yarn만)

$ tar zxvf node_modules.tar.gz
$ npm install --prefer-offline &> /dev/null

$ tar zxvf node_modules.tar.gz
$ tar zxvf cache.tar.gz
$ yarn install --prefer-offline --cache-folder ./cache &> /dev/null

$ tar zxvf cache.tar.gz
$ pnpm config set store-dir $PWD/cache
$ pnpm install &> /dev/null

누군가 이미 과거에했던 것은 정상입니다. 여기에 몇 가지 기존 작업이 있습니다.

패키지

캐시 나 예기치 않은 동작을 방지하기 위해 도커 컨테이너 내에서 실험을 실행하고 설치를 완료 할 때마다 다음 설치를 위해 새 컨테이너를 실행합니다.

내가 사용하는 도커 이미지 node:12와 각 구성 요소의 버전 은 다음 과 같습니다.

  • 노드 : v12.16.1
  • npm : 6.13.4
  • 원사 : 1.22.0
  • pnpm : 4.12.1

네트워크의 영향을 보여주기 위해 원격 및 로컬 레지스트리 ( verdaccio ) 시나리오를 모두 실험 합니다. 로컬 레지스트리에서 사용자가 다음과 같은 작업을한다고 가정했습니다.

$ npm install react@latest --registry http://nvy-registry:4873
# or
$ yarn add react@latest --registry http://nvy-registry:4873

신청

실제 시나리오를 모방하기 위해 .NET을 사용하여 만든 웹 앱을 실험했습니다 create-react-app.

명령어

내가 사용하는 5 가지 기본 명령이 있습니다.

  • npm install
  • npm ci
  • yarn install
  • yarn install --frozen-lockfile
  • pnpm install

그들 모두에 대해 &> /dev/nullstdout 출력을 제거하기 위해 추가 하고 실행 시간은 3 번의 실행에서 평균입니다. (실행 시간이 꽤 안정적이라 3 번이면 충분하다고 생각합니다)

실험을 시작하고 우리가 성취 할 수있는 곳을 봅시다. 😃

매개 변수

튜닝 할 4 개의 매개 변수가 있습니다.

  1. 지역 레지스트리

2. 캐시 된 node_modules

node_modules네트워크에서 모듈을 다시 다운로드 할 필요가 없도록 설치 전에 폴더를 압축하고 압축을 해제 하여 설치 속도를 높이는 일반적인 기술 입니다.

3. 글로벌 캐시

~/.npmnpm과 ~/.yarn얀의 경우 글로벌 캐시 폴더가 있으므로 미리 글로벌 캐시를 추가하여 속도를 높일 수 있는지 알고 싶습니다.

4. --prefer-offline

세부 정보 : https://docs.npmjs.com/misc/config#prefer-offline

true 인 경우 캐시 된 데이터에 대한 부실 성 검사는 무시되지만 누락 된 데이터는 서버에서 요청됩니다. 전체 오프라인 모드를 강제하려면을 사용하십시오 --offline.

이 옵션을 사용하면 npm 또는 yarn이 원격 데이터를 확인하고 로컬 캐시를 직접 사용하는 것을 방지 할 수 있습니다.

실험

다음은 모든 구성의 결과입니다.

숫자는 모듈 설치를 완료하는 데 걸리는 시간 (초)입니다.

관찰

  • &> /dev/nullstdout은 시간이 많이 걸리므로 항상 설치 출력을 비활성화하십시오.
  • 로컬 레지스트리는 모듈 다운로드의 안정성을 보장 할 수 있지만 부작용이 크므로 이러한 이점을 얻기 위해 잠금 파일을 수정하지 않는 것이 좋습니다.
  • 의 속도는 npm ci다른 구성에서 안정적이지만, npm install빨리와 할 수 있습니다 --prefer-offline.
  • 의 속도 yarn install와는 yarn install --frozen-lockfile전혀 다르지 않다.
  • 글로벌 캐시는 yarn
  • 의 효율성은 pnpm캐시없이 글로벌 캐시에 크게 의존하며 캐시 전처리 오버 헤드로 인해 속도가 다른 것보다 느립니다.

도움이 되었기를 바라며 더 빠르게 실험 할 아이디어가 있다면 언제든지 응답을 남기거나 저장소 내에 문제를 생성하십시오. 😄

Suggested posts

React 자습서가 가르치지 않는 5 가지 주요 교훈

React 자습서가 가르치지 않는 5 가지 주요 교훈

React 개발자가 알아야 할 필수 개념과 교훈이 많이 있지만 대부분의 튜토리얼에서는 다루지 않습니다. 나는 당신이 알아야 할 가장 중요한 주제 중 일부를 직접 골랐지만, 자세히 다루기 위해 시간을 할애 한 기사는 거의 없습니다.

Express.js 시작하기

Express.js 시작하기

Express는 웹 및 모바일 앱을 만드는 경험을 즐겁게 만드는 기능 세트가 포함 된 Node.js 프레임 워크입니다.

Related posts

성능 최적화 된 A / B 테스트 솔루션

성능 최적화 된 A / B 테스트 솔루션

의제 : 소개 : TL;하지만 읽을 수 있습니다. A / B 테스트, CloudFront 및 Lamba @ edge에 대해 이미 알고있는 경우 AWS Lambda @ edge를 사용한 A / B 테스트로 직접 이동하십시오. A / B 테스트 란 무엇입니까? A / B 테스트는 웹 사이트의 두 가지 버전에 대한 사용자의 참여를 비교하는 데 초점을 맞춘 UX 연구 방법론입니다.

fp-ts (Typescript)에서 Option 및 둘 중 하나 사용

저는 함수형 프로그래밍을 좋아합니다. 몇 년 동안 실수를하거나 토끼 구멍을 뚫는 것으로부터 저를 몇 번 구해 주었기 때문입니다. 동일한 입력이 주어지면 출력이 항상 동일하다는 것을 알면 안심입니다.

Syncfusion Blazor 파일 업로드 구성 요소에서 이미지를 미리 보는 방법

Syncfusion Blazor 파일 업로드 구성 요소에서 이미지를 미리 보는 방법

Syncfusion Blazor 파일 업로드는 하나 이상의 파일, 이미지, 문서, 오디오, 비디오 및 기타 파일을 서버에 업로드하기위한 구성 요소입니다. 여러 파일 선택, 진행률 표시 줄, 자동 업로드, 끌어서 놓기, 폴더 (디렉터리) 업로드, 파일을 포함하는 다양한 기능을 갖춘 HTML5 업로드 구성 요소 (<input type =”file”>)의 확장 버전입니다. 검증 등.

6 React 개발자로서 후회

내가 일찍했으면하는 것

6 React 개발자로서 후회

React는 배울 수있는 훌륭한 도구입니다. 그것은 우리가 우리 자신의 방식으로 일을 할 수있게합니다.