티스토리 뷰

npm install 과 npm ci 차이?

둘 다 의존성 패키지를 설치하는 명령어이다. 차이점은 기준이 되는 파일

  • npm install은 package.json을 기준으로 의존성을 설치한다. 
  • npm ci(clean install)은 package-lock.json을 기준으로 의존성을 설치한다. => 최종 빌드 시에 사용하면 good

위의 차이점을 알기 위해서는 Semantic versioning 개념에 대한 이해가 있어야 한다. 

Semantic versioning(SemVer)

npm은 시멘틱 버저닝(SemVer)이란 버전 표기법을 따른다. 

- 이 시점에는 이 기능을 제공할 겁니다!라는 의미(버전 업이 된다면 새로운 기능을 제공(혹은 업데이트)할 거야)

이 개념을 알면 라이브러리의 상세를 보지 않더라도 대충 어떤 업데이트가 있는 지 파악할 수 있다. 
  • `major.minor.patch` 의 형태 (왼 -> 오 방향으로 읽는다)
  • major: breaking change를 포함한 변경이 포함된 업데이트(이전 것과 호환이 안되는 기능이 존재한다는 의미 breaking)
  • minor: 기존 기능에는 영향x breaking change가 없는 변경이 포함된 업데이트
  • patch: breaking change가 없는 버그 fix

package.lock.json 과 package.json 의 차이

  • lock.json은 시맨틱 버저닝앞에 ~, ^ (틸드, 캐럿)이 붙지않는다. => 버전을 잠궈버린다. 변경X
  • package.json은 설치된 패키지에 틸드, 캐럿이 붙는다. (*요즘은 주로 캐럿만 사용됨) => 버전에 허용 범위가 있다. =>  변경O

dependency 버전을 고정해두지 않고 범위로 설정하는 이유(package.json의 경우)?

  • 버그 fix, update등이 발생할 수 있기 때문이다. (major 버전의 업데이트 말고 하위 버전의 업데이트일 경우 유용)  
댓글