npm ci
와 npm i
는 모두 Node.js 프로젝트의 의존성 패키지를 설치하는 명령어이지만, 사용 목적과 동작 방식에 명확한 차이가 있습니다. 결론부터 말하면, 개발 환경에서는 npm i
를, 배포나 협업 환경에서는 npm ci
를 사용하는 것이 일반적입니다.
주요 차이점
구분 | npm i (npm install ) |
npm ci (npm clean-install ) |
---|---|---|
기준 파일 | package.json |
package-lock.json |
package-lock.json |
의존성 변경 시 업데이트 | 수정하지 않음 (불일치 시 오류) |
node_modules |
기존 폴더에 추가/변경 | 항상 기존 폴더를 삭제 후 새로 설치 |
속도 | 상대적으로 느릴 수 있음 | 일반적으로 더 빠름 |
주요 용도 | 개발 중 새로운 패키지 추가/업데이트 | CI/CD 파이프라인, 팀원 간 동일 환경 구축 |
npm i
(npm install)
npm i
는 프로젝트에 필요한 패키지를 설치하거나 업데이트할 때 사용하는 가장 일반적인 명령어입니다.
- 동작 방식:
package.json
파일을 기준으로 패키지를 설치합니다. 만약package-lock.json
파일이 존재하고package.json
의 버전 범위와 일치하면package-lock.json
을 참고하여 설치 속도를 높입니다. - 특징:
- 새로운 패키지를 추가하거나 버전을 업데이트하면
package.json
과package-lock.json
파일이 변경될 수 있습니다. ^
(캐럿)이나~
(틸드) 같은 버전 범위 지정자에 따라 다른 개발자가 설치할 때 다른 부 버전(minor)이나 패치 버전(patch)이 설치될 수 있어, 팀원 간에 미묘한 버전 차이가 발생할 수 있습니다.
- 새로운 패키지를 추가하거나 버전을 업데이트하면
- 사용 시점:
- 프로젝트를 처음 시작할 때
- 새로운 패키지를 추가하거나 기존 패키지를 업데이트/삭제할 때
예시
# 모든 의존성 설치
npm i
# 특정 패키지(예: express) 설치
npm i express
# 개발용 의존성(예: nodemon) 설치
npm i -D nodemon
npm ci
(npm clean-install)
npm ci
는 package-lock.json
파일에 명시된 정확한 버전의 패키지들만 설치하여, 언제 어디서든 동일한 의존성 환경을 보장하기 위해 사용됩니다. 'ci'는 Continuous Integration (지속적 통합)의 약자입니다.
- 동작 방식:
package-lock.json
파일만을 기준으로 패키지를 설치합니다.package.json
과package-lock.json
의 버전이 일치하지 않으면 오류를 발생시키며 설치를 중단합니다. - 특징:
- 설치 시작 전,
node_modules
폴더를 항상 삭제하고 처음부터 새로 설치하여 깨끗한 상태를 보장합니다. package-lock.json
파일을 절대 수정하지 않으므로, 항상 명시된 버전 그대로 설치됩니다. 이로 인해 설치 속도도npm i
보다 빠른 경우가 많습니다.
- 설치 시작 전,
- 사용 시점:
- CI/CD 환경(Jenkins, GitHub Actions 등)에서 빌드 및 배포할 때
- 프로젝트에 처음 참여하여 다른 팀원들과 동일한 개발 환경을 구축할 때
예시:
# package-lock.json에 따라 모든 의존성 재설치
npm ci
반응형
'Language > JS(Node.js)' 카테고리의 다른 글
NVM을 활용하여, Node Version을 관리하는 방법 (0) | 2023.04.22 |
---|---|
[Javascript] Array.prototype.forEach vs Array.prototype.Map (2) | 2022.04.03 |
[Javascript] 자바스크립트 함수와 클래스의 this binding (0) | 2022.03.29 |
[자바스크립트] map 함수에서 비동기 콜백 처리하기 (1) | 2022.03.28 |
[Javascript] 이벤트란 무엇인가? (0) | 2022.01.23 |
댓글