npm install vs ci

npm을 통해 노드 모듈을 설치할 때 사용하는 명령어로는 npm install과 npm ci가 있습니다.

둘 다 npm 노드 모듈을 설치하는 명령이지만 뚜렷한 차이점이 있습니다.

npm install 명령은 package.json 및 package-lock.json 파일과 밀접한 관련이 있습니다.

먼저 package.json은 설치할 모듈의 종속성 목록을 정의하고 각 모듈의 버전은 버전 범위를 따릅니다.

이때 버전은 다음과 같이 사용 가능한 영역을 지정할 수 있습니다.

참조) https://docs.npmjs.com/cli/v6/using-npm/semver#ranges

절반 | npm 문서

npm의 시맨틱 버전 관리기

docs.npmjs.com

반면에 package-lock.json은 설치된 노드 모듈의 정확한 버전을 제공합니다.

"devDependencies": {
  "fbr": "latest",
  "fs": "0.0.1-security",
  "https": "^1.0.0",
  "node-static": "^0.7.11"
}

이제 package.json과 package-lock.json이 어떻게 다른지 알았으므로 npm install과 npm ci가 어떻게 다른지 비교해 보겠습니다.

npm 설치
– package.json을 읽어 종속성 목록을 생성하고 package-lock.json을 생성하여 설치할 실제 종속성 버전을 지정합니다.

npm CI
– package-lock.json이 있어야 합니다.
– package-lock.json 파일에 지정된 버전으로 노드 모듈을 설치하고 package.json을 사용하여 버전이 유효한지 확인합니다.
– 위의 두 가지 조건이 충족되지 않으면 npm ci가 실행되지 않습니다.
– 실행시 기존 노드 모듈을 삭제 후 재설치 합니다.

따라서 npm install을 실행하면 하나의 package.json 파일만 있으면 되고 결과적으로 package-lock.json이 생성됩니다.

그러나 npm ci를 실행할 때 “package.json” 및 “package-lock.json” 파일이 있어야 합니다.

노드 모듈의 버전 일치는 오늘날과 같이 여러 개발자가 프로젝트를 공동 작업할 때 매우 중요한 문제입니다.

이를 위해 npm ci가 더 효율적으로 올 수 있습니다. 또한 npm ci는 명확한 버전을 지정했기 때문에 설치 자체가 매우 빠릅니다. (물론 package.json에 clear 버전을 정의하고 npm install을 사용하면 됩니다.)

그러나 npm ci는 기존 노드 모듈을 모두 삭제하고 다시 설치하기 때문에 이는 단점이 될 수 있습니다.