Node.js 애플리케이션에서 `package.json` 파일은 프로젝트의 핵심 요소 중 하나입니다. 이 파일은 프로젝트 메타데이터, 의존성, 스크립트, 그리고 기타 설정 정보를 포함하고 있어 프로젝트 관리를 체계적으로 할 수 있게 도와줍니다. 이번 글에서는 `package.json` 파일의 역할, 설정 방법, 주요 옵션, 그리고 `dependencies`, `devDependencies`, `peerDependencies`의 차이에 대해 자세히 알아보겠습니다.
package.json 파일의 역할
1. 프로젝트 메타데이터 제공
- name: 프로젝트 이름을 정의합니다.
- version: 프로젝트의 버전을 정의합니다.
- description: 프로젝트에 대한 간단한 설명을 제공합니다.
- main: 애플리케이션의 진입점 파일을 지정합니다.
2. 의존성 관리
- dependencies: 프로젝트가 운영 환경에서 필요로 하는 패키지를 정의합니다.
- devDependencies: 개발 환경에서만 필요로 하는 패키지를 정의합니다.
- peerDependencies: 특정 버전의 패키지와 호환성을 요구합니다.
3. 스크립트 정의
- scripts: 자주 사용하는 명령어를 정의하여 npm 명령어로 쉽게 실행할 수 있습니다.
4. 기타 설정
- author: 프로젝트 작성자 정보를 제공합니다.
- license: 프로젝트의 라이선스를 정의합니다.
- repository: 소스 코드 저장소 정보를 제공합니다.
- keywords: 프로젝트와 관련된 키워드를 정의합니다.
package.json 파일의 설정 방법
프로젝트 초기화는 `npm init` 명령어를 사용하여 쉽게 할 수 있습니다. 이 명령어는 몇 가지 질문을 통해 `package.json` 파일을 생성하고 기본 정보를 설정합니다. 예를 들어:
npm init
주요 옵션
{
"name": "my-project",
"version": "1.0.0",
"description": "This is a sample project",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Your Name",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"mocha": "^8.2.0"
},
"peerDependencies": {
"react": "^16.8.0"
},
"repository": {
"type": "git",
"url": "https://github.com/yourname/my-project.git"
},
"keywords": [
"nodejs",
"express",
"sample"
]
}
dependencies, devDependencies, peerDependencies의 차이
1. dependencies
- 애플리케이션이 운영 환경에서 필요로 하는 패키지입니다.
- `npm install` 시 기본적으로 설치됩니다.
- 예: `express`, `lodash` 등.
2. devDependencies
- 개발 환경에서만 필요로 하는 패키지입니다.
- 테스트 도구, 빌드 도구 등이 포함됩니다.
- `npm install –save-dev` 명령어를 사용하여 추가합니다.
- 예: `mocha`, `eslint`, `webpack` 등.
3. peerDependencies
- 특정 버전의 패키지와 호환성을 요구합니다.
- 주로 플러그인이나 라이브러리가 특정 버전의 패키지와 함께 동작해야 할 때 사용됩니다.
- `npm`은 `peerDependencies`를 자동으로 설치하지 않으며, 경고를 통해 알려줍니다.
- 예: `react`를 사용하는 플러그인들이 특정 버전의 `react`를 요구할 때.
package.json 설정 예제
1. Express 애플리케이션
- `dependencies`에 `express`를 추가하여 웹 서버를 구성.
- `devDependencies`에 `nodemon`을 추가하여 개발 중 자동 재시작 기능을 제공합니다.
{
"name": "express-app",
"version": "1.0.0",
"description": "A simple Express application",
"main": "app.js",
"scripts": {
"start": "node app.js",
"dev": "nodemon app.js"
},
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"nodemon": "^2.0.7"
}
}
2. React 라이브러리
- `peerDependencies`에 `react`와 `react-dom`을 정의하여 특정 버전과의 호환성을 요구.
- `devDependencies`에 `babel`과 `webpack`을 추가하여 빌드 환경을 구성합니다.
{
"name": "react-library",
"version": "1.0.0",
"description": "A custom React library",
"main": "lib/index.js",
"scripts": {
"build": "webpack --config webpack.config.js"
},
"peerDependencies": {
"react": "^16.8.0",
"react-dom": "^16.8.0"
},
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"webpack": "^4.41.5"
}
}
결론
`package.json` 파일은 Node.js 프로젝트의 필수 파일로, 의존성 관리, 스크립트 실행, 메타데이터 제공 등 다양한 역할을 합니다. 이 파일을 잘 활용하면 프로젝트 관리를 효율적으로 할 수 있습니다. 각 의존성 종류(`dependencies`, `devDependencies`, `peerDependencies`)의 차이를 이해하고 적절하게 사용하면 더욱 원활한 개발 환경을 구축할 수 있습니다.