npm outdated 패키지 업데이트 전략
npm outdated 명령어를 사용하여 의존성 업데이트를 효과적으로 관리하는 전략을 다룹니다.
Introduction
프로젝트의 의존성을 최신 상태로 유지하는 것은 보안과 성능에 중요합니다. npm outdated 명령어를 사용하면 outdated된 패키지를 쉽게 확인할 수 있습니다.
Environment
npm --version
# 10.2.4
node --version
# v20.11.0
# outdated 패키지 확인
npm outdatedProblem
프로젝트에 outdated된 패키지가 너무 많아 업데이트에 어려움이 있었습니다:
$ npm outdated
Package Current Wanted Latest Location
express 4.17.1 4.18.2 4.18.2 my-project
lodash 4.17.19 4.17.21 4.17.21 my-project
axios 0.21.1 1.6.0 1.6.0 my-project
typescript 4.3.5 5.3.3 5.3.3 my-project
# npm audit 결과
found 47 vulnerabilities (12 moderate, 23 high, 12 critical)Analysis
버전 비교
| 항목 | 의미 | 예시 |
|---|---|---|
| Current | 현재 설치된 버전 | 4.17.1 |
| Wanted | package.json 허용 범위 내 최신 | 4.18.2 |
| Latest | npm 레지스트리 최신 버전 | 4.18.2 |
업데이트 유형
{
"dependencies": {
"express": "^4.17.1", // Minor/Patch 업데이트 허용
"react": "~18.2.0", // Patch 업데이트만 허용
"moment": "2.29.4" // 정확한 버전 고정
}
}Solution
1. 안전한 업데이트 순서
# 1단계: outdated 패키지 확인
$ npm outdated
# 2단계: patch 업데이트 (안전)
$ npm update --save
# 3단계: minor 업데이트
$ npm install package@minor
# 4단계: major 업데이트 (주의)
$ npm install package@latest2. 자동 업데이트 스크립트
#!/bin/bash
# scripts/update-deps.sh
echo "=== Checking outdated packages ==="
npm outdated
echo ""
echo "=== Updating patch versions ==="
npm update --save
echo ""
echo "=== Running tests ==="
npm test
if [ $? -eq 0 ]; then
echo ""
echo "=== Tests passed! Committing changes ==="
git add package.json package-lock.json
git commit -m "chore: update patch dependencies"
else
echo ""
echo "=== Tests failed! Rolling back ==="
git checkout package.json package-lock.json
npm install
fi3. npm-check-updates 사용
# 설치
$ npm install -g npm-check-updates
# outdated된 패키지 확인
$ ncu
# package.json 업데이트
$ ncu -u
# 특정 패키지만 업데이트
$ ncu -u express
# 설치 후 테스트
$ npm install
$ npm test4. GitHub Actions 자동화
# .github/workflows/dependency-update.yml
name: Dependency Update
on:
schedule:
- cron: '0 0 * * 1' # 매주 월요일
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- name: Check outdated
run: npm outdated
- name: Update dependencies
run: |
npm update --save
npm audit fix
- name: Run tests
run: npm test
- name: Create PR
if: success()
uses: peter-evans/create-pull-request@v5
with:
title: 'chore: update dependencies'
branch: dependency-updates5. 버전 고정 전략
{
"dependencies": {
"express": "^4.18.2",
"react": "^18.2.0"
},
"devDependencies": {
"typescript": "~5.3.3",
"eslint": "^8.56.0"
},
"overrides": {
"minimist": "^1.2.8"
}
}6. lockfile 유지 관리
# lockfile 검증
$ npm ci
# lockfile 재생성
$ rm package-lock.json
$ npm install
# lockfile 변경사항 확인
$ git diff package-lock.jsonLessons Learned
- 정기적 업데이트: 주 1회 outdated 패키지를 확인하고 업데이트하세요
- 테스트 우선: 업데이트 후 항상 테스트를 실행하세요
- 단계적 진행: Major 업데이트는 주의 깊게, 단계적으로 진행하세요
- lockfile 관리: package-lock.json을 항상 커밋하세요
- 보안 검사:
npm audit로 보안 취약점을 정기적으로 확인하세요
This blog does not accept any external sponsorships, affiliate marketing, or ad revenue.