npm install과 npm ci 의 차이

npmci


지인과 개발을 하던 도중 프로젝트에서 알게 된 사실이다

프로젝트 초기 설정시나 실서버에 배포할때 package.json 파일과 package-lock.json 파일이 존재할 경우

npm install 명령어를 입력할때 package-lock.json 파일이 존재하므로 항상 동일한 패키지 버전을 설치해주며

package-lock.json 파일은 변경이 일어나지 않는것이라고 생각했다


그러나 package-lock.json파일이 존재해도 npm install 명령어로 인해서

package-lock.json의 변경이 일어나는 경우가 있으며

다른 버전의 package가 설치될수있다는것을 알았다

이를 방지하기 위해서 npm ci라는 명령어가 존재한다는것을 알게되었다


package-lock.json이 변경되는 경우

1. npm 매니저의 버전이 낮은 경우 → 패키지의 변경은 없음

2. package.json파일이 변경되는 경우 → 패키지의 변경이 존재함

3. node_modules의 정보와 일치하지 않는 경우 → 패키지의 변경이 존재


문제가 되는건 패키지의 변경이 일어나는 경우다

2번의 경우에 대해서 설명하자면 package.json의 정보를 직접 입력하여서 변경하는 경우 발생할수있다

또한 npm install <패키지명>으로도 패키지를 추가하는 경우 package-lock.json에 내용이 추가되거나 수정될수있다

3번같은 경우는 node_modules에 저장된 내용이 package.json과 package-lock.json에 일치하지 않으면 자동으로 패키지의 변경이 일어난다


npm ci를 사용하는 이유

package.json과 package-lock.json이 존재해도 패키지를 설치할때 버전 변경이 일어날수있다

그런데 npm ci를 사용할 경우 이러한 버전 변경이 일어나는것을 막을수있다

또한 설치전에 기존 node_modules폴더를 삭제하기때문에 node_modules때문에 발생하는 패키지변경을 방지한다

npm ci는 강제적으로 package-lock.json대로 설치하며 아래의 경우 에러를 발생시킨다


- package-lock.json 파일이 존재하지 않는 경우

- package-lock.json 파일의 버전과 package.json의 종속성이 일치하지 않는 경우


아래의 상황에서 npm ci를 사용하는것을 권장

- 원격저장소에서 받은 프로젝트를 초기설정할때

- 실제 서버에 배포하거나 빌드하는 경우에




참조

npm i와 npm ci의 차이

Apr 21, 2024 Views 84