minyoung

npm install의 역할과 package.json, package-lock.json의 차이점 본문

Node.js

npm install의 역할과 package.json, package-lock.json의 차이점

stylish-code 2025. 1. 3. 16:24
npm install의 역할

✅ npm install의 역할

1. 의존성 설치
- 프로젝트의 package.json 파일에 정의된  dependencies와 devDependencies를 기준으로 필요한 패키지를 설치
- 설치된 패키지는 프로젝트 디렉터리 내의 node_modules 폴더에 저장

2. 하위 의존성 해결
- 각 패키지가 의존하는 서브 패키지(의존성의 의존성)도 함께 설치
- ex) A 패키지가 B와 C를 필요로 한다면, B와 C도 자동으로 설치됨

 3. package-lock.json 업데이트
패키지를 설치하거나 업데이트 하면, package-lock.json 파일이 자동으로 생성되거나 수정됨 

 

✅ package.json

- 프로젝트의 설계도 역할을 하는 파일
- 주요 기능 : 프로젝트 이름, 버전, 설명 등 메타데이터 저장, 프로젝트에서 사용하는 의존성(라이브러리)과 버전 범위를 정의
- 이를 통해 협업자가 필요한 의존성을 명확히 파악하고, 동일한 환경을 설정할 수 있음 

 

  package-lock.json

- 설치된 패키지의 정확한 버전과 의존성 트리를 기록 
- 주요 목적 : 설치된 패키지의 재현성 보장, 협업 및 배포 환경에서 일관성 유지 
- 이 파일은자동으로 관리되며, 수동으로 수정하지 않는 것이 좋음 

 

 

node_modules

- 패키지가 실제로 설치된 폴더로, 모든 의존성 파일이 저장됨
- 프로젝트에서 바로 사용할 수 있는 형태로 패키지가 저장되며, 설치된 파일의 용량이 커지는 원인 중 하나임
- 이 폴더는 일반적으로 버전 관리할 때, Git에서 제외됨 => .gitignore 설정을 통해

 


❤️  package-lock.json 과 package.json 의 차이점 

 

- 비유하자면 아래와 같음 

  • package.json: "내가 필요로 하는 라이브러리는 이런 종류와 범위야."
  • package-lock.json: "내 컴퓨터에 설치된 라이브러리들은 정확히 이 버전들로 설치되었어."

- "npm install" 설치 과정으로 설명하자면 아래와 같음

package.json은 프로젝트 정보와 의존성에 대한 정보 즉, 설계도의존성의 이름과 버전 범위를 정의

(ex: "express": "^4.18.2"는 4.18.2 이상, 5.0.0 미만까지 허용 =>

  • **^**는 "최소 이 버전부터 시작해서, 주 버전이 변경되지 않는 범위 내에서 자동으로 최신 버전을 허용"하는 방식
  • 즉, 마이너 버전패치 버전은 업데이트되지만, 주 버전변경되는 버전은 설치되지 않음
    • 허용되는 버전: 4.18.2, 4.19.0, 4.20.0, ...
    • 허용되지 않는 버전: 5.0.0, 6.0.0

)

 

 

package-lock.json은 npm install 명령을 실행하여 로컬에 설치된 패키지들의 정확한 버전과 구조를 기록

node_modules에 설치된 패키지의 정확한 버전, 다운로드 URL, 해시 값(integrity) 등을 포함, 의존성 트리가 어떻게 구성되었는지 명확히 보여줌