dependencies
dependencies는 애플리케이션이 실행될 때 필요한 패키지들을 포함합니다. 이 패키지들은 애플리케이션의 실제 동작에 필수적이며, 배포된 애플리케이션이 제대로 작동하기 위해 설치되어야 합니다.
예시
{
"name": "my-app",
"version": "1.0.0",
"dependencies": {
"express": "^4.17.1",
"mongoose": "^5.10.9"
}
}
이 경우 express
와 mongoose
는 애플리케이션이 실행될 때 필요하기 때문에 dependencies
에 포함됩니다.
devDependencies
devDependencies는 개발 환경에서만 필요한 패키지들을 포함합니다. 이 패키지들은 애플리케이션의 코드를 작성하거나 테스트, 빌드하는 과정에서 필요하며, 실제 배포 시에는 포함되지 않는 경우가 많습니다.
예시
{
"name": "my-app",
"version": "1.0.0",
"devDependencies": {
"jest": "^26.6.3",
"eslint": "^7.13.0"
}
}
이 경우 jest
와 eslint
는 테스트와 코드 린팅에 필요하기 때문에 devDependencies
에 포함됩니다. 실제 배포 시에는 필요하지 않습니다.
설치 및 사용
npm install
명령어를 사용하면 dependencies
와 devDependencies
에 정의된 모든 패키지가 설치됩니다. 하지만 --production
플래그를 사용하면 dependencies
에 정의된 패키지만 설치됩니다.
npm install --production
예시 코드
package.json
파일의 예시를 통해 dependencies와 devDependencies를 구분하여 사용하는 방법을 확인해봅시다.
{
"name": "my-app",
"version": "1.0.0",
"description": "An example project",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "jest"
},
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"jest": "^26.6.3"
}
}
예시 프로젝트 구조
my-app/
├── package.json
├── index.js
└── test/
└── app.test.js
index.js
:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
test/app.test.js
:
const request = require('supertest');
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.status(200).send('Hello World!');
});
describe('GET /', () => {
it('responds with Hello World!', (done) => {
request(app)
.get('/')
.expect(200)
.expect('Hello World!', done);
});
});
이 프로젝트에서 express
는 애플리케이션이 실행될 때 필요한 패키지이므로 dependencies
에 포함됩니다. 반면 jest
는 테스트를 위해 필요하므로 devDependencies
에 포함됩니다.
이렇게 dependencies
와 devDependencies
를 구분하여 정의하면, 프로젝트의 의존성을 보다 명확하게 관리할 수 있습니다.