ci라 함은 Contiuouse Integration (지속적인 통합) 이라는 의미입니다.
npm install 과 커맨드가 유사하나, npm install을 사용하는 것보다 두배정도가 빠릅니다.
npm ci 의 장점을 빠른 설치 속도라고 이야기 하고 있습니다. npm install 과 커맨드가 유사하나, npm install을 사용하는 것보다 두배정도가 빠릅니다.
package-lock.json 등의 lockfile을 기준으로 package를 설치하게 되어 있으므로, 규모가 큰 조직에서 package에 대한 lockfile이 승인되면, npm ci를 활용하여 package-lock.json에 명시되어 있는 패키지를 설치하도록 합니다.
만약, package.json내의 파일과 package-lock.json 내의 버전 등이 다르면, package-lock.json을 기준으로 package.json 파일을 수정하며, 명시되지 않은 부분에서는 오류를 발생시키므로, Application 관리에 있어서 안정성을 확보할 수 있다고 이야기 하고 있습니다.
공통점
npm install 과 npm ci 모두 결과적으로는 두 명령어 모두 의존성 목록을 설치하는것입니다.
package.json 을 읽어 의존성 목록을 만들고 package-lock.json 을 통해 설치할 의존성의 버전을 알려주는 것입니다.
두 방식 모두 package-lock.json을 먼저 확인하고 만약 존재하면 해당 lockfile을 이용해서 의존하고 있는 패키지 정보를 파악하고 node_modules에 설치합니다.
그리고 node_modules나 package.json에 변화가 생기면 package-lock.json을 업데이트하여 의존 패키지 정보를 기록합니다.
차이점
npm install 명령어는 package.json, package-lock.json 에 모두 쓰기 권한을 가집니다.
npm ci 는 쓰기 권한이 없습니다.
npm ci는 package-lock.json에 명시되어있는 패키지 정보를 활용해서 완전히 정확한 버전의 패키지들을 설치해서 node_modules에 적대합니다.
따라서 해당 명령어로 패키지를 설치하는 모든 개발자들이 동일한 버전의 패키지를 사용하고 있음을 보장할 수 있습니다.
npm i와는 다르게 package-lock.json을 수정하지 않습니다.
그리고 이 lockfile을 기반으로 동작하기 때문에 해당 파일이 반드시 필요합니다.