package.json
package.json
은 프로젝트의 정보와 패키지 매니저(npm, yarn)로 설치된 모듈(이름, 버전)을 관리하는 파일이다.
// vite package.json
{
"name": "frontend",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"axios": "^1.7.7",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-router-dom": "^6.27.0"
},
"devDependencies": {
"@eslint/js": "^9.13.0",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.3.3",
"eslint": "^9.13.0",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-refresh": "^0.4.14",
"globals": "^15.11.0",
"vite": "^5.4.10"
}
}
package.json에서 모듈 버전은 Semenantic Versioning(SemVer)
를 따른다.
SemVer
이란SemVer
은 버전 번호를 통해 소프트웨어의 변경 사항을 명확하게 나타내기 위한 규칙Major.Minor.Patch
형식으로 versioning을 한다.
- Major(주 버전)
- 첫 번째 숫자는 기능이 크게 변경되거나 하위 호환이 깨지는 변경이 있을 때 올린다.
- Minor(부 부전)
- 두 번째 숫자는 하위 호환성을 유지하면서 새로운 기능이 추가 될 때 올린다. 기존 기능에는 영향을 미치지 않는다.
- Patch(수 버전)
- 버그 수정이나 작은 변경사항이 있을 때 올린다. 기존 기능에는 영향을 미치지 않고 문제를 해결하거나 성능을 개선한다.
// package.json
"dependencies": {
"aaa": "1.2.3",
"bbbbb": ">1.2.3",
"cc": ">=1.2.3",
"dddd": "<1.2.3",
"eee": "<=1.2.3",
"ffff": "^1.2.3",
"gg": "~1.2.3",
}
> 1.2.3
≥ 1.2.3
< 1.2.3
≤ 1.2.3
≤ 1.2.3
은 1.2.3
, 1.1.8
로 업데이트 할 수 있지만 1.2.4
, 1.4.0
버전으로 업데이트 불가1.2.x
1.2.x
는 1.2.9
로는 가능하지만 1.3.0
으로는 할 수 없다.1.2.3 || >= 1.2.9 < 2.0.0
||
은 or 연산자(또는)로, 하나 이상의 범위를 명시할 수 있다.1.2.3 || >= 1.2.9
은 1.2.3
또는 1.3.0
으로 업데이트할 수 있다.1.2.3-alpha
1.2.3-alpha.1
1.2.3-0.0.1
1.2.3-x.2.z
preRelease 태그는 빠르게 업데이트되는 경우, 혹은 정식 버전으로 적합하지 않은 경우 붙이는 태그이다.
patch 버전 뒤에 (-)을 붙여 프리릴리즈 버전을 표시한다.
앞서 말했듯이 정식 버전으로 적합한 상태가 아니므로 정식 버전보다 우선순위가 낮다.
~1.2.3
1.2.3
이상이고 1.2.3이상 1.2.x 이하
minor 버전이 3으로 올라가지는 않도록 업데이트 범위를 제안한다.^1.2.3
1.2.3
이상의 버전을 허용하지만, major 버전이 2로 올라가지는 않도록 업데이트 범위를 제한1.3.x
, 1.4.x
등 같은 major 버전(1) 내에서는 최신 마이너 또는 패치 버전으로 업데이트될 수 있지만, 2.x.x
버전은 설치되지 않는다.