Language/JS(Node.js)

npm i (npm install)와 npm ci (npm clean-install)

Joonfluence 2025. 9. 23.

npm cinpm 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.jsonpackage-lock.json 파일이 변경될 수 있습니다.
    • ^ (캐럿)이나 ~ (틸드) 같은 버전 범위 지정자에 따라 다른 개발자가 설치할 때 다른 부 버전(minor)이나 패치 버전(patch)이 설치될 수 있어, 팀원 간에 미묘한 버전 차이가 발생할 수 있습니다.
  • 사용 시점:
    • 프로젝트를 처음 시작할 때
    • 새로운 패키지를 추가하거나 기존 패키지를 업데이트/삭제할 때

예시

# 모든 의존성 설치
npm i

# 특정 패키지(예: express) 설치
npm i express

# 개발용 의존성(예: nodemon) 설치
npm i -D nodemon

npm ci (npm clean-install)

npm cipackage-lock.json 파일에 명시된 정확한 버전의 패키지들만 설치하여, 언제 어디서든 동일한 의존성 환경을 보장하기 위해 사용됩니다. 'ci'는 Continuous Integration (지속적 통합)의 약자입니다.

  • 동작 방식: package-lock.json 파일만을 기준으로 패키지를 설치합니다. package.jsonpackage-lock.json의 버전이 일치하지 않으면 오류를 발생시키며 설치를 중단합니다.
  • 특징:
    • 설치 시작 전, node_modules 폴더를 항상 삭제하고 처음부터 새로 설치하여 깨끗한 상태를 보장합니다.
    • package-lock.json 파일을 절대 수정하지 않으므로, 항상 명시된 버전 그대로 설치됩니다. 이로 인해 설치 속도도 npm i보다 빠른 경우가 많습니다.
  • 사용 시점:
    • CI/CD 환경(Jenkins, GitHub Actions 등)에서 빌드 및 배포할 때
    • 프로젝트에 처음 참여하여 다른 팀원들과 동일한 개발 환경을 구축할 때

예시:

# package-lock.json에 따라 모든 의존성 재설치
npm ci
반응형

댓글