📌 들어가며
우테코 8기 프리코스를 준비하면서, 이전에 우테코 7기에서 사용했었던 package.json을 그대로 가져와 프로젝트를 세팅했다.
1년 넘는 시간이 지나며 내부 패키지들이 여러 번 업데이트되었을 것 같아 npm update 명령어로 최신 버전으로 맞추려 했지만, 의외로 아무것도 바뀌지 않았다.
이유를 찾아보니 npm은 단순히 모든 패키지를 최신으로 올려주는 게 아니라, package.json에 지정된 버전 범위(^, ~, 또는 고정 버전) 에 따라 업데이트를 제한적으로 수행한다는 걸 알게 되었다.
그래서 오늘은 npm update가 실제로 어떻게 동작하는지, 그리고 그 한계를 넘어 최신 메이저 버전까지 한 번에 업데이트하는 방법을 정리했다.
📌 npm update의 동작 원리
npm update는 package.json 파일에 지정된 버전 범위를 기준으로 가능한 최신 버전을 설치한다.
즉, 단순히 모두 최신으로 올리는 것이 아니라 허용된 범위 안에서만 최신으로 올리는 개념이다.
// package.json 의 일부
{
"devDependencies": {
"eslint": "^8.57.1",
"prettier": "~3.3.3",
"eslint-plugin-auto-js-extension": "0.1.1"
}
}
💡 버전 범위 지정 방식
^ 또는 ~가 붙은 패키지만 npm update 실행 시 최신으로 올라간다.
1. ^
- 메이저 버전 고정, 마이너/패치 허용
- ex) ^8.57.1 → 8.x.x
- ex) 8.70.0 (✅) / 9.0.0 (❌)
2. ~
- 마이너 버전 고정, 패치만 허용
- ex) ~3.3.3 → 3.3.x
- ex) 3.3.5 (✅) / 3.4.0 (❌)
3. 없음
- 완전 고정
- ex) 0.1.1 → 0.1.1
- 업데이트 없음 (🚫)
⚠️ 메이저 버전은 자동으로 안 올라간다
npm update는 버전 범위 밖의 업데이트(예: 8 → 9) 를 수행하지 않는다.
즉, eslint의 최신 버전이 9.x.x여도 ^8.57.1로 지정되어 있으면 계속 8버전대에 머문다.
이럴 때 필요한 도구가 바로 npm-check-updates다.
📌 npm-check-updates로 완전 최신화하기
1. 설치
npm install -g npm-check-updates
2. 사용
ncu # 업데이트 가능한 패키지 목록 확인
ncu -u # package.json의 버전 필드를 최신으로 변경
npm install
# 위의 명령어를 한줄로 요약 👇
npx npm-check-updates -u && npm install
이렇게 하면 메이저 버전까지 포함해 package.json의 모든 패키지를 최신으로 갱신할 수 있다.
🔥 npm-check-updates 적용



📚 오늘의 배움
- npm update는 버전 범위(^, ~, 없음)에 따라 다르게 동작한다.
- 메이저 버전까지 업데이트 하기 위해선 npm-check-updates를 사용해야 한다.
- 앞으로 패키지 버전을 올릴 때 버전 범위를 의식적으로 관리해야겠다.
🚨 10/18 추가
npx eslint .
명령어를 사용하는 중에 기존에 사용중이던 .eslintrc.cjs 파일은 ESLint v9.0.0 이상부터는 지원이 안된다고한다.
추가적으로 호환이 안되는 ESLint 규칙들이 아직은 많은 것 같아 ESLint는 이전 메이저 버전 8 으로 되돌리기로 결정하였다.
'우아한테크코스 > 프리코스 1주차' 카테고리의 다른 글
| 프리코스 1주차 KPT 회고 (0) | 2025.10.21 |
|---|---|
| [TIL] 커밋 메시지 컨벤션 (Angular Style) (0) | 2025.10.16 |
