package.json
현재 폴더(프로젝트)에 관한 정보와 패키지 매니저(npm, yarn)을 통해 설치된 라이브러리, 모듈들의 의존성을 관리하는 json파일이다.
{
"name": "coding-hyeok",
"version": "0.1.0",
"private": true,
// ~~
"dependencies": {
"열코": "^1.2.3"
},
"devDependencies": {
"혁코": "~1.1.1"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
},
"proxy": "http://localhost:4000"
}
위는 예시이다. 리액트를 사용하는 독자라면 익숙한 것일테다.
name, version, private, proxy 등은 프로젝트에 관한 정보이다.
dependencies는 런타임 환경에서 필요한 모듈들에 대한 버전 의존성이다.
devDependencies는 dev환경에서 필요한 모듈들에 대한 버전 의존성이다.
그럼 1.0.0 < 이건 무슨 뜻이냐 ?!
Major | - 이전 버전보다 큰 기능 향상을 한 경우 Major 버전을 올린다. - 기능이 크게 변경되었기에, 이전 버전과 호환이 불가하다. |
Minor | - 새로운 기능이 추가된 경우 Minor 버전을 올린다. - 하위 버전과 호환이 가능하다. |
Patch | - 버그가 수정된 경우 Patch 버전을 올린다. - 하위 버전과 호환이 가능하다. |
위와 같은 뜻을 가진다.
그렇다면 버전 앞에 붙는 ^(caret)와 ~(tilde)의 의미는 무엇일까 ?
^ caret
Major 버전이 일치하는 경우에는 Minor와 Patch 버전을 자유롭게 업데이트할 수 있다는 것을 의미한다.
예를 들어 위와 같이 ^1.2.3이면 1.3.3, 1.9.9 버전도 사용이 가능하다.
~ tilde
Major 버전은 일치하고 Minor 버전도 특정 번호로 고정되며, Patch 버전만 특정 번호 이상이어야한다는 의미이다.
예를 들어 위와 같이 ~1.1.1이면 1.1.2, 1.1.9 버전이 사용이 가능하고, 1.2.1은 사용이 불가능하다.
package-lock.json
위 설명을 보면 의문이 하나 생길 것이다.
예를 들어, 열코: "^1.2.3"로 돼있는 package.json으로 npm install을 하면
A가 npm install을 했을 때는 1.2.3버전이 다운받아졌다.
그런데, 몇개월 후 B가 npm install을 했을 때 열코 라이브러리가 업데이트 되어서 1.2.9버전이 다운받아진 것이다.
그럼 A와 B는 다른 버전의 라이브러리를 사용할 것이다. 문제가 없을 수도 있겠지만 있을 수도 있다.
이를 방지하기 위해 package-lock.json으로 정확한 버전과 하위 모듈들에 대한 버전들을 정의해서 이를 방지한다.
package-lock.json의 기능은 아래와 같다.
1. 정확한 의존성 버전 관리
- 프로젝트에 설치된 각 패키지의 정확한 버전을 기록. 이는 프로젝트를 공유하거나 새로운 개발 환경에서 프로젝트를 설치할 때에 정확한 의존성 버전을 보장한다.
2. 의존성 트리의 재현 가능성
- 프로젝트에서 사용중인 패키지들 간의 의존성 트리를 포함하고 있따. 이는 프로젝트를 다른 환경으로 이전하거나 다른 개발자가 프로젝트를 복제할 때에 정확한 의존성 트리를 재현할 수 있게 해준다.
3. 빌드 시에 일관성 유지
- 프로젝트에 패키지를 추가하거나 업데이트 할때, 패키지 설치 시의 정확한 버전을 유지하면서 패키지를 설치한다. 이를 통해 일관성있는 빌드를 보장할 수 있다.
4. 보안 및 신뢰성
- 패키지의 해시값을 기록하여 패키지의 정확한 상태를 확인하고 변경 여부를 확인하는 데에 도움을 준다.
'Javscript' 카테고리의 다른 글
[JS] Package Manager (npm, yarn, yarn berry, pnpm) (0) | 2024.03.01 |
---|---|
[Javascript] 인증과 인가, 암호화, jwt (flask, bcrypt) (0) | 2022.02.02 |
[Javascipt] 화살표 함수 => (1/30) (0) | 2022.01.31 |
[Javascript] 이벤트루프, 동시성, 이벤트 종류 (1/30) (0) | 2022.01.30 |
[Javascript] onclick event(인라인 이벤트, eventlistener, onclick 차이점) (2) | 2022.01.29 |