package.json과 package-lock.json
package.json
package.json은 프로젝트의 정보를 정의하고, 의존하는 패키지 버전 정보를 명시하는 파일이다.
일반적으로 루트 디렉토리에 위치하며, 작성되는 정보를 크게 프로젝트의 정보, 패키지 버전 정보로 나눌 수 있다.
{
"name" : "test", // 프로젝트의 이름
"description" : "javascript's test programming.", // 프로젝트 설명
"keywords" : ["util", "f", "server", "client", "browser"], // 프로젝트 검색할 때 참조되는 키워드
"author" : "Goorm", // 프로젝트 작성자
"contributors" : [], // 프로젝트에 참여한 공헌자
"dependencies" : [], // 프로젝트 의존성 관리. 요구되는 확장 모듈 정리
"repository" : {"type": "git", "url" : "git://gitbub.com/documentcloud/test.git" }, // 프로젝트 소스 코드 저장소
"main" : "test.js",
"version" : "1.1.6" // 프로젝트 버전
}
- 프로젝트의 정보: name, version 영역
- 패키지 버전 정보: dependencies 또는 devDependencies 영역
프로젝트 정보
package.json 파일은 반드시 name과 version 항목을 포함해야 한다.
- name: 소문자 한 단어로 이루어져야 한다. 하이픈(-)과 언더스코어(_)가 포함될 수 있다.
- version: x.x.x 형식을 따라야 한다.
패키지 정보
패키지 정보는 dependencies 또는 devDependencies에 작성된다.
- dependencies: 프로덕션 환경에서 응용 프로그램에 필요한 패키지
- devDependencies: 로컬 개발 및 테스트에만 필요한 패키지
패키지를 지정하기 위해서는 dependencies 또는 devDependencies에 패키지를 명시해야 한다.
시맨틱 버저닝
버전을 명시할 때 작성 규칙을 시맨틱 버저닝이라고 한다.
dot(.) 기준으로 major.minor.patch로 구분된다.
- 최초 출시: 1.0.0으로 시작한다.
- patch: 이전 버전과 호환되는 버그 수정. 세 번째 숫자를 증가시킨다. ex) 1.0.1
- minor: 이전 버전과 호환되는 새로운 기능. 가운데 숫자를 증가시키고 마지막 숫자를 0으로 만든다. ex) 1.1.0
- major: 이전 버전과 호환되지 않는 변경. 첫 번째 숫자를 증가시키고 가운데와 마지막 숫자를 0으로 만든다. ex) 2.0.0
틸드와 캐럿
패키지의 버전에는 틸드(~)와 캐럿(^) 표기되어 있다.
- 틸드(~): 해당 패키지의 패치 레벨 변경을 허용하겠다는 의미.
ex) "~4.3.0" 이면 4.3.0 이상, 4.4.0 미만과 같은 의미로, 4.4.0 미만의 패치 레벨 변경을 허용한다는 의미이다. - 캐럿(^): 해당 패키지의 마이너, 패치 변경을 허용하겠다는 의미.
ex) "^2.6.11"은 2.6.11 이상, 3.0.0 미만과 같은 의미로, 3.0.0 미만의 마이너, 패치 변경을 허용하겠다는 의미이다.
package-lock.json
틸드와 캐럿처럼 package.json에서는 버전정보를 저장할 때 version range를 사용한다.
협업을 할 때는 package.json을 사용해 각자의 컴퓨터에 같은 패키지들을 설치해서 개발 환경을 구성한다. 이 때, 아래와 같은 경우에는 같은 package.json을 이용해 npm install을 진행하더라도 서로 다른 node_modules를 생성하는 경우가 발생하기도 한다.
- npm 버전이 다른 경우
- version range 때문에 최신 버전의 패키지가 설치된 경우
- 사용하고 있는 패키지가 의존하고 있는 패키지가 새로운 버전으로 배포된 경우
이런 상황을 피하기 위해 생긴 것이 package-lock.json이다.
package-lock.json에는 정확한 버전명이 적혀있다.
npm install을 할 때 같이 생기는데, node_modules 구조나 package.json이 수정되고 생성될 때 당시 의존성에 대한 정확하고 구체적인 정보를 명시해준다.
따라서 협업할 때는 package-lock.json을 꼭 레파지토리에 같이 커밋해주자.
출처
https://junwoo45.github.io/2019-10-02-package-lock/
https://velog.io/@skyepodium/package.json
https://edu.goorm.io/learn/lecture/557/%ED%95%9C-%EB%88%88%EC%97%90-%EB%81%9D%EB%82%B4%EB%8A%94-node-js/lesson/174371/package-json
Author And Source
이 문제에 관하여(package.json과 package-lock.json), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yj6151122/package.json과-package-lock.json저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)