Skip to main content

package.json

작성일 : 2025.01.06

1. package.json이란?​

Node.js 프로젝트의 설정 파일입니다. 프로젝트의 정보와 의존성(dependencies)을 관리하는 중요한 파일입니다.

2. 가장 중요한 두 가지 필드​

name (이름)​

프로젝트의 이름을 지정합니다.

{
    "name": "my-project"
}
  • 반드시 소문자로 작성
  • 특수문자, 공백 사용 불가
  • URL에 사용되므로 URL 안전 문자만 사용

version (버전)​

프로젝트의 버전을 지정합니다.

{
    "version": "1.0.0"
}
  • 반드시 세 자리 숫자로 구성 (예: 1.0.0)
  • 변경사항이 있을 때마다 버전 업데이트 필요

3. 프로젝트 정보 필드​

description (설명)​

{
    "description": "이 프로젝트는 ..."
}
  • 프로젝트에 대한 간단한 설명
  • npm 검색 시 표시되는 내용

homepage (홈페이지)​

{
    "homepage": "https://github.com/username/project"
}
  • 프로젝트 웹사이트 주소

author (작성자)​

{
    "author": {
        "name": "홍길동",
        "email": "hong@example.com",
        "url": "https://hong.com"
    }
}

4. 라이선스 (license)​

{
    "license": "MIT"
}
  • 일반적으로 "MIT", "Apache-2.0" 등 사용
  • 비공개 프로젝트는 "UNLICENSED" 사용

5. 실행 스크립트 (scripts)​

프로젝트에서 자주 실행하는 명령어를 저장합니다.

{
    "scripts": {
        "start": "node index.js",
        "test": "jest",
        "build": "webpack"
    }
}
  • npm run 스크립트명으로 실행
  • 예: npm run start, npm run test

6. 의존성 관리 (dependencies)​

프로젝트에 필요한 패키지들을 관리합니다.

{
    "dependencies": {
        "express": "^4.17.1",
        "react": "^17.0.2"
    },
    "devDependencies": {
        "jest": "^27.0.6",
        "webpack": "^5.0.0"
    }
}
  • dependencies: 실제 운영에 필요한 패키지
  • devDependencies: 개발 시에만 필요한 패키지

7. 환경 설정​

engines (실행 환경)​

{
    "engines": {
        "node": ">=12.0.0"
    }
}
  • 필요한 Node.js 버전 지정

private (비공개 설정)​

{
    "private": true
}
  • true로 설정하면 실수로 npm에 배포되는 것을 방지

실제 예시​

{
    "name": "my-awesome-project",
    "version": "1.0.0",
    "description": "멋진 프로젝트입니다",
    "main": "index.js",
    "scripts": {
        "start": "node index.js",
        "test": "jest"
    },
    "author": {
        "name": "홍길동",
        "email": "hong@example.com"
    },
    "license": "MIT",
    "dependencies": {
        "express": "^4.17.1"
    },
    "devDependencies": {
        "jest": "^27.0.6"
    },
    "engines": {
        "node": ">=12.0.0"
    },
    "private": true
}