카테고리 없음

npm install과 npm ci의 차이

Calssess 2022. 2. 24. 11:00
반응형

들어가기 전에

최근에 git clone 후 npm install을 했을 때 package-lock.json가 변경되는 문제를 겪었고 npm ci 명령어를 통해 해결하게 되었던 일이 있었다.

이 문제를 통해 package-lock.json이 존재한다고 하더라고 npm 버전에 따라 npm install이 다르게 구동되어 package-lock.json을 기존과 다른 내용으로 덮어쓸 수 있게 된다는 것을 알게 되었다.

그럼 npm ci는 무엇이기에 이런 문제를 해결해 준 걸까?
그리고 모듈을 설치할 때 무조건 npm ci를 사용하면 되는 걸까?

위의 궁금증 해결을 위해 npm install과 npm ci가 무엇이고, 둘의 차이는 어떤 것인지 그리고 언제 사용하면 좋을지에 대해 정리를 해봤다.

npm install

소개

먼저 npm install은 패키지와 패키지가 의존하는 모듈을 설치하는 명령어이며, npm i 혹은 npm add로 쓰기도 한다.

사용 방법

npm install는 다음과 같이 명령어를 이용할 수 있다.

  • 개별적으로 패키지를 설치할 때위와 같은 방법으로 사용하면 package.json과 package-lock.json이 없는 경우에는 이 2개의 파일이 생성되고, package.json과 package-lock.json이 존재한다면 dependencies에 패키지가 추가된다.
  • npm install 패키지_이름
  • pacakge.json의 dependencies에 나열되어 있는 패키지를 설치할 때이때 package.json의 요구 사항(dependencies)을 만족해야 package-lock.json을 적용된다. 만약 요구 사항을 만족하지 않는다면 pacakge를 업데이트하고 package-lock.json 파일의 내용이 변경된다.
  • npm install

이 외에도 npm install 사용 방법은 다양하다. 이 글에서는 npm install과 npm ci 차이 설명이 주목적이기 때문에 가볍게 정리하고 넘어가지만 더 자세히 알고 싶다면 여기(npm-install 공식 문서)를 참고하면 된다.

npm ci

소개

npm ci는 npm install 과 유사하지만, npm install과 달리 같은 개발 환경을 구축해 줄 수 있기 때문에 테스트 플랫폼, 지속적인 통합 및 배포(CI와 CD)와 같은 자동화된 환경이나 dependencies를 새로 설치해야 하는 모든 상황에서 사용할 수 있는 명령어이다.

참고로 5.7.0 버전부터 지원한 명령어이며, npm 공식 블로그에 따르면, 이름에서 알 수 있듯이 CI(Continuous Integration) 환경에 큰 이점이 될 것이라고 생각하고 있다.​

사용 방법

사용 방법은 단순히 npm ci 명령어를 입력만 해주면 된다.

npm ci

주의 사항

  1. npm ci는 pacakge-lock.json 기반으로 설치가 진행되기 때문에 package-lock.json이나 npm-shrinkwrap.json 파일이 꼭 존재해야 한다.
    만약 package-lock.json이 없다면 아래와 같은 결과를 출력하고 패키지 설치가 진행되지 않는다.
  2. added 1 packages in 4.892s
  3. npm ci는 아래와 같이 사용할 수 없다.npm ci는 한 번에 전체 프로젝트만 설치할 수 있기 때문에 개별적으로 패키지를 설치하는 것이 불가능하다.
  4. npm ci 패키지_이름
  5. 이미 node_modules 폴더가 존재하는 경우에 npm ci를 실행시키면 기존 node_modules 폴더를 삭제하고 다시 설치한다.
  6. package-lock.json의 dependencies가 package.json의 dependecies와 일치하지 않는다면, npm ci는 package-lock.json을 업데이트 하는 대신에 오류와 함께 종료한다.

npm install 과 npm ci의 속도 비교

  • npm install로 설치했을 때
    added 1032 packages from 651 contributors and audited 1039 packages in 236.795s
    
  • npm ci로 설치했을 때
    added 1033 packages in 135.108s
    

npm install을 사용해서 1032개의 패키지를 설치했을 때 236.795초가 걸렸고, npm ci를 사용해서 1033개의 패키지를 설치했을 때 135.108초가 걸렸다.

위의 결과를 통해 npm ci가 npm install 보다 더 빠르다는 것을 알 수 있다.

npm ci가 npm install 보다 빠른 이유는 지정된 버전의 패키지만 설치하면 돼서 최신 호환 버전을 확인하는 과정이 필요 없기 때문이다.

참고로, npm ci는 다음과 같은 경우에 훨씬 더 빠를 것이다.

  • package-lock.json 혹은 npm-shrinkwrap.json 파일이 있을 때
  • node_modules 폴더가 없거나 비었을 때

참고 - npm-shrinkwrap.json 이란? dependencies에 설치된 패키지의 버전을 고정시키는 명령어인 npm shrinkwrap를 실행시켰을 때 생성되는 파일로서, 패키지가 의존하고 있는 모듈의 버전과 정보를 갖고 있다.

반응형