Nerd
Nerd
Nerd
전체 방문자
오늘
어제
  • 분류 전체보기 (439)
    • Today I Learned (333)
    • 주간회고 (8)
    • FrontEnd (5)
    • ErrorNote (7)
    • 자바스크립트 (24)
    • 알고리즘 (13)
    • html과 css (21)
    • 토이프로젝트 (5)
    • React-Native (1)
    • React (13)
    • node (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • package-lcok.json
  • 선언적 프로그래밍
  • npm i
  • 명령적 프로그래밍
  • 에러노트
  • Today I Learned
  • wil
  • React
  • 토이프로젝트
  • 파이썬 기초
  • ErrorNote
  • JSX
  • 코드숨
  • 주간회고
  • TIL
  • 모던 자바스크립트
  • 리액트 훅
  • 데이터 타입
  • npm ci
  • pacakge.json
  • 자바스크립트
  • Redux
  • 토이 프로젝트
  • 파이썬기초
  • 3FS
  • 절차지향적 프로그래밍
  • 리액트
  • 값의 할당 및 재할당
  • 메타인지
  • 리덕스 툴킷

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Nerd

Nerd

node

npm] npm i 와 npm ci의 차이점(Feat. package-lock.json과 pacakge.json 의 차이점)

2022. 10. 9. 00:04

npm i (npm install)

npm install 은 프로젝트에 패키지를 설치하기 위해 사용하는 명령어입니다.

사용법

필요한 패키지를 설치할 경우 아래와 같은 형식으로 사용합니다.

npm install <설치할 패키지>
or
npm install <설치할 패키지>@latest (최신 버전으로 설치)
or
npm install <설치할 패키지>@버전명 (특정 버전으로 설치)

프로젝트가 의존하고 있는 모든 패키지 설치

npm install

위의 두 가지 방법 모두 package-lock.json을 먼저 확인하고
존재한다면 lockfile을 이용해서 의존하고 있는 패키지 정보를 확인하고
node_moduels에 설치합니다.
만약 node_modules나 package.json에 변화가 생기면
package-lock.json을 업데이트하여 의존 패키지 정보를 기록합니다.


npm ci (npm clean-install)

사용법

npm ci

npm ci는 package-lock.json에 명시되어있는 패키지 정보를 활용해서
정확한 버전의 패키지들을 node_moduels에 설치합니다.
따라서, 협업을 할 때, 팀원들이 동일한 버전의 패키지를 사용하는 것을 보장합니다.

npm i 와 npm ci의 차이점

  • package-lock.json을 수정하지 않습니다.
  • npm ci는 package-lock.json 또는 npm-shrinkwrap.json이 있어야 합니다.
  • pacagke-lock.json의 의존성이 package.json의 의존성과 일치하지 않으면
  • npm ci는 pacakge-lock.json을 업데이트하지 않고 오류와 함께 종료됩니다.
  • npm ci는 한 번에 전체 프로젝트만 설치할 수 있습니다.
  • node_moduels가 이미 있는 경우 npm ci가 설치를 시작하기 전에 자동으로 제거됩니다.
  • npm ci는 쓰기 권한이 없기 때문에 pacakge-lock.json을 수정하지 않습니다.
    오직 package-lock.json을 읽고 의존성 목록을 설치합니다.

package-lock.json

이번 글에서 자주 등장하는 package-lock.json은 무엇일까요?

package-lock.json은 npm이 node_moduels 트리 또는
pacakge.json을 수정하는 모든 작업에 대해 자동 생성됩니다.
의존성 업데이트에 관계없이 후속 설치에서 동일한 트리를 생성할 수 있도록
생성한 정확한 트리를 설명하고
이 파일은 소스 리포지토리에 커밋하기 위한 것이며 다양한 용도로 사용됩니다.

협업 시 pacakge-lock.json 을 사용한다면 아래와 같은 과정을 거칠 수 있습니다.

  1. node_modules 폴더를 제외하고 package.json과 package-lock.json 파일을 커밋합니다.
  2. 팀원은 소스코드를 받은 후 npm install 또는 npm ci를 실행합니다.
  3. 의존성 트리가 처음 세팅한 환경과 동일하게 설치됩니다.

위의 과정을 거치면 팀원들이 동일한 버전의 패키지를 사용할 수 있게 됩니다.

pacakge.json과 package-lock.json의 차이점

  • pacakge.json은 버전 정보를 저장할 때 version range로 명시되어있습니다.
    • ex ) "react": "~17.0.1"
  • package-lock.json은 버전명이 정확히 명시되어 있습니다.

참고

npm ci : npm ci 공식문서
pacakge-lcok.json : package-lock.json 공식문서

    Nerd
    Nerd
    꾸준히 열심히 지속적으로 하겠습니다!

    티스토리툴바