대충 알던 package.json 정리

SangHoon·2022년 2월 5일
1

💡 타입스크립트를 공부하다가 갑자기 dependenciesdev-dependencies의 차이점이 너무 궁금해서 그동안 대충 알던 package.json 파일에 대해 정리해보려 한다.

📜 package.json

package.json은 현재 프로젝트에 관한 정보와, 패키지 매니저(npm, yarn)을 통해 설치한 모듈들의 의존성을 관리하는 파일이다.
일반적으로 루트 디렉토리에 위치한다.

  • 직접 작성해도 되고 npm init을 통해 생성할 수 있다

프로젝트에 대한 명세이며 프로젝트와 패키지 정보를 담고 있다.

  • 프로젝트 정보 : name, version 영역
  • 패키지 버전 정보 : dependencies 또는 devDependencies 영역

package.json 파일은 반드시 name과 version 항목을 포함해야 한다.
version: x.x.x 형식을 따라야 하며, 작성 규칙을 Semantic Versioning이라고 한다.

Package 정보

패키지 정보는 dependencies 또는 devDependencies에 작성된다.

  • dependencies : 프로덕트 환경에서 응용 프로그램에 필요한 패키지. 일반적인 경우 의존성을 명시하는 영역이다.
  • devDependencies : 로컬 개발 및 테스트에만 필요한 패키지. 개발 모드일 때만 의존성을 명시하는 영역이다. 실제로 배포할 때는 필요없는 테스트 도구나 웹팩, 바벨 같은 것들을 넣어주면 된다.

Package와 Module

1) Package
package는 package.json으로 설명되는 파일 또는 디렉토리이다.
패키지는 npm 레지스트리에 공개되기 위해 반드시 package.json 파일을 가지고 있어야 한다.

2) Module
모듈은 node.js의 require() 함수로 로드될 수 있는 node_modules 디렉토리 안의 파일 또는 디렉토리이다.
모듈은 package.json 파일을 가질 필요가 없다. 모든 모듈들이 패키지는 아니다. package.json을 가진 모듈만이 패키지이다.

패키지 지정

패키지를 지정하기 위해서는 패키지의 package.json 파일의 "dependencies" 또는 "devDependencies"에 패키지를 명시해야 한다.
npm install을 실행하면, npm은 package.json에 나열된 각각의 시멘틱 버전 요구사항을 충족하는 dependencies와 devDependencies를 다운받는다.

Semantic Versioning

버전을 나타내는 점과 숫자들을 보았을 것이다. [MAJOR.MINOR.PATCH]로 구성된 소프트웨어 릴리즈 버전 넘버 네이밍 시스템이다.

최초에 출시된 상태에서는 1.0.0으로 시작한다.

  • MAJOR Version - (이전 버전과 호환되지 않는 변경)에서는 첫번째 숫자를 1증가시킨다. MAJOR 버전이 올라가면 MINOR, PATCH의 버전은 0이 되어야 한다. ex) 2.0.0

  • MINOR Version - (이전 버전과 호환되는 새로운 기능)에서는 가운데 숫자를 증가시키고, MINOR 버전이 올라가면 PATCH의 버전은 0이 되어야한다. ex) 1.1.0

  • PATCH Version - (이전 버전과 호환되는 버그 수정)에서는 3번째 숫자를 증가시킨다. ex) 1.0.1

Tilde(~) & Caret(^)

패키지의 버전에는 ~, ^이 포함되어있다. ~는 틸드(tilde), ^는 캐럿(caret)이라 한다.

Tilde(~)
해당 패키지의 PATCH 레벨 변경을 허용하겠다는 의미이다.
~17.0.18은 17.0.0이상, 17.1.0 미만과 같은 의미이다.
즉, 17.1.0 미만의 PATCH 레벨변경을 허용하겠다는 의미이다.

"devDependencies": {
  "@types/node": "~17.0.18",
},

Caret(^)
해당 패키지의 MINOR, PATCH 변경을 허용하겠다는 의미이다.
^17.0.2은 17.0.2 이상, 18.0.0 미만과 같은 의미이다.
즉, 18.0.0 미만의 MINOR, PATCH 변경을 허용하겠다는 의미이다.

"dependencies": {
   "react": "^17.0.2",
}
profile
상훈

0개의 댓글