NPM 버전과 관리
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
Node.js 프로젝트 개발자, 패키지 관리자
난이도: 중급(버전 관리 및 의존성 트리 이해 필요)
핵심 요약
- 시맨틱 버전(MAJOR.MINOR.PATCH): 호환성에 따라 버전 번호가 변경되며,
^
또는~
로 범위 지정 가능 - package.json과 package-lock.json의 역할:
package.json
은 의존성 정의,package-lock.json
은 정확한 버전과 해시 정보 기록 - 의존성 충돌 방지:
npm install
은package-lock.json
기반으로 설치,npm update
는 범위 내 최신 버전 업데이트
섹션별 세부 요약
1. 시맨틱 버전 관리
- MAJOR: 호환되지 않는 API 변경 시 증가 (예: 1.2.3 → 2.0.0)
- MINOR: 호환되면서 기능 추가 시 증가 (예: 1.2.3 → 1.3.0)
- PATCH: 버그 수정/내부 개선 시 증가 (예: 1.2.3 → 1.2.4)
- 버전 범위:
^1.2.3
→ 주 버전 동일 범위,~1.2.3
→ 부 버전 동일 범위
2. package.json 파일 구조
- 필수 항목:
name
,version
,main
,scripts
,dependencies
,devDependencies
- 예시:
```json
"dependencies": {"express": "^4.18.2"},
"devDependencies": {"nodemon": "^2.0.22"}
```
3. package-lock.json의 역할
- 의존성 트리 기록: 설치된 패키지의 실제 버전, 무결성 해시(integrity hash) 저장
- 예시:
```json
"dependencies": {"express": "4.18.2", "resolved": "..."},
"devDependencies": {"nodemon": "2.0.22"}
```
- 목적: 동일한 환경에서 의존성 불일치 방지, 보안 리스크 예방
4. 버전 범위 사용 시 주의점
- 문제 사례:
^4.18.0
지정 시 개발자 간 설치 버전 차이 (4.18.1 vs 4.19.0) - 해결 방법:
package-lock.json
사용으로 정확한 버전 강제
5. npm 명령어 활용
- npm outdated: 현재/필요/최신 버전 비교 (예:
@eslint/js
9.24.0 → 9.27.0) - npm update: 범위 내 최신 버전으로 업데이트 (예:
date-fns
3.6.0 → 3.6.0) - npm install: 특정 버전 명시 (예:
npm install date-fns@4
)
6. 피어 의존성(peer dependencies) 관리
- 예시:
eslint-config-prettier
는eslint >=7.0.0
요구 - 확인 방법:
```bash
npm view eslint-config-prettier peerDependencies
npm explain eslint
```
결론
- 핵심 팁:
package-lock.json
을 반드시 사용하여 의존성 불일치 방지,npm outdated
로 버전 체크 후npm update
로 업데이트,npm install
으로 주 버전 강제 변경@ - 실무 적용: 의존성 트리 관리, 버전 범위의 적절한 설정, 피어 의존성 충돌 시
npm explain
활용