Package.json 정리하기

Dae-Hee·2023년 1월 10일
0
post-thumbnail

그동안 깊게 살펴보지 않았던 package.json
기본을 놓치지 말자


▪︎ 개요

  • 프로젝트가 의존하는 패키지의 리스트
  • 프로젝트의 버전을 명시
  • 다른 환경에서도 빌드를 재생 가능하게 만들어, 다른 개발자가 쉽게 사용할 수 있도록 한다.
즉, 오픈소스 패키지 생태계를 사용하기 위한 명세서 이자
프로젝트의 의존성 관리를 위한 명세서 또 이 생태계로의 배포를 위한 명세서이다.


▪︎ 기본 구성 요소

// package.json
{
  "name": "PROJECT_NAME",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  }
  "engines": { "node" : ">=0.10.3 <0.12" }
}
  • name: 이 패키지의 이름을 나타내며 프로젝트(프로덕트)의 이름을 나타낸다.

  • version: 어플리케이션의 버전을 명시하는 항목 x.x.x의 형태로 작성 - 시멘틱 버저닝

    • version은 [Major].[Minor].[Patch]의 형태가 일반적이다.
    • 기존 버전과 호환되지 않는다면 Major(주主) 버전을 올린다.
    • 새로운 기능을 추가하면 Minor(부部) 버전을 올린다.
    • 버그를 고쳤다면 Patch(수修) 버전을 올린다.
  • description: 문자열로 기술한 패키지에 대한 설명

  • main: 패키지의 진입점(entry point)이 되는 모듈의 ID

  • scripts: 패키지의 생명주기에서 다양한 타이밍에 자주 사용할 commandalias 통해
    지정해 둘 수 있는 dictionary

  • engines: 동작가능한 node 버전을 명시



▪︎ 패키지 버전 정보(dependencies)

// package.json
"dependencies": {
  "@types/express": "^4.17.15",
  "cors": "^2.8.5",
  "express": "^4.18.2",
  "typescript": "^4.9.4"
},
"devDependencies": {
  "@types/cors": "^2.8.13",
  "nodemon": "^2.0.20",
  "ts-node": "^10.9.1"
},
  • 프로젝트가 의존하고 있는 패키지를 일괄적으로 관리하기 위한 필드

  • dependencies 프로덕션 환경 에서 응용 프로그램에 필요한 패키지

  • devDependencies 로컬 개발 및 테스트에만 필요한 의존 패키지
    --save-dev <package>

  • 모듈 버전을 명시할 때, 틸드(~), 캐럿(^), 고정 버전 으로 명시
    틸드, 캐럿, 고정 명시 마다 해당 버전이 업데이트 돼서 새롭게 install 될 때
    새롭게 업데이트해서 받아들이는 버전 범위가 다름

  • 틸드(~) : 현재 지정한 버전의 마지막 자리내의 범위에서만 자동으로 업데이트 (패치 버전 변경 허용)
    - ~0.0.1 : ≥ 0.0.1 < 0.1.0
    - ~0.1.1 : ≥ 0.1.1 < 0.2.0
  • 캐럿(^) : 1.x.x내에서는 하위호환성을 보장 그 내에서는 모두 업데이트를 진행 (메이저 이전 변경 허용)
    - ^1.0.2 : ≥ 1.0.2 < 2.0
    - ^1.0 : ≥ 1.0.0 < 2.0


▪︎ package-lock.json / yarn.lock?

  • package.json 는 패키지 버전 정보를 필드와 캐럿등의 방식으로 version range를 사용
  • 협업을 할때 범위가 아닌 정확한 버전명이 명시 되어있는 문서가 필요하기 때문에 생성
  • lock 파일은 node_modules트리 또는 package.json이 수정될 때, 자동으로 생성




Reference

0개의 댓글