npm install
과 npm ci
는 모두 Node.js 프로젝트에서 의존성을 설치하는 명령어이지만, 사용하는 목적과 동작 방식에서 중요한 차이점이 있습니다.
npm install
package.json
에 정의된 의존성을 기반으로 의존성을 설치합니다.package-lock.json
파일이 존재하면, 해당 파일을 참조하여 버전을 설치합니다.package-lock.json
파일이 없으면 새로 생성하고, 기존 파일이 있으면 업데이트할 수 있습니다.package-lock.json
을 업데이트하거나 생성합니다.package.json
의 버전 범위(^
, ~
등)에 따라 최신 버전이 설치될 수 있습니다.npm ci
(Clean Install)package-lock.json
(또는 npm-shrinkwrap.json
) 파일을 기반으로 의존성을 설치합니다.package-lock.json
에 명시된 버전과 완전히 동일한 버전을 설치합니다.package-lock.json
파일을 절대 수정하지 않습니다.package-lock.json
파일이 없으면 에러를 발생시킵니다.node_modules
폴더를 삭제한 후 의존성을 다시 설치합니다.기능 | npm install | npm ci |
---|---|---|
대상 파일 | package.json 을 기준으로 설치, package-lock.json 이 있으면 참조 | package-lock.json 또는 npm-shrinkwrap.json 만을 기준으로 설치 |
package-lock.json 수정 | 필요한 경우 생성하거나 수정 | 절대 수정하지 않음 |
기존 node_modules 처리 | 기존 폴더 유지 | 기존 폴더 삭제 후 재설치 |
버전 일치 | package.json 의 버전 범위를 허용 | package-lock.json 의 정확한 버전만 설치 |
속도 | 느릴 수 있음 | 더 빠름 |
사용 목적 | 개발 환경에서 유연한 설치 | CI/CD 및 재현 가능한 환경 보장 |
npm install
:
npm ci
:
npm install
은 유연성을 제공하지만 의존성 버전이 다를 수 있어 환경 차이가 발생할 수 있습니다.npm ci
는 항상 고정된 환경을 제공하며, 속도가 더 빠르고, CI/CD에서 재현성을 보장합니다.npm ci
가 대부분 좋을것 같지만 프로젝트를 하다보면 생각보다 패키지를 수정하거나 추가할때가 많다.
팀원이 늘어나게 되면 npm ci 를 사용하는게 좋을수도 있지만 초기엔 유연하게 가져가는게 더 좋지 않을까 생각이든다.