package.json vs package-lock.json
작성일 : 2025.01.06
package.json
- 프로젝트의 메타데이터를 담고 있는 설정 파일
- npm init 명령어로 생성
- 주요 역할:
- 프로젝트 기본 정보 관리 (이름, 버전, 설명 등)
- 의존성 패키지 관리
- 프로젝트 스크립트 정의
- 의존성 버전 관리 특징:
- 유연한 버전 표기법 사용 (^, ~, >, < 등)
- ^1.2.3: 1.x.x 중 최신 버전
- ~1.2.3: 1.2.x 중 최신 버전
- 1.2.3: 정확히 해당 버전만 사용
package-lock.json
- npm 5.0 이상에서 자동 생성되는 파일
- 의존성 트리의 정확한 버전을 저장
- 주요 역할:
- 팀원 간 동일한 의존성 보장
- 패키지 설치 시 일관성 유지
- 빌드 재현성 확보
- 포함하는 정보:
- 정확한 버전 정보
- 패키지의 무결성을 검증하는 해시값
- 의존성 트리 구조
두 파일의 차이점
1. 버전 관리 방식
- package.json:
{ "dependencies": { "lodash": "^4.17.21" // 4.17.21 이상, 5.0.0 미만 } } - package-lock.json:
{ "dependencies": { "lodash": { "version": "4.17.21", // 정확한 버전 "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-..." // 해시값 } } }
2. 사용 목적
- package.json:
- 프로젝트 설정 관리
- 필요한 의존성 선언
- 스크립트 및 설정 정의
- package-lock.json:
- 의존성의 정확한 버전 고정
- 패키지 설치의 일관성 보장
- 빌드 환경의 재현성 확보
3. 버전 관리(Git) 관점
- package.json:
- 반드시 버전 관리에 포함
- 프로젝트의 필수 설정 파일
- package-lock.json:
- 버전 관리에 포함 권장
- 팀 프로젝트에서 동일한 의존성 보장
- CI/CD 파이프라인의 안정성 확보