Node.js 프로젝트에서 dependencies와 devDependencies의 차이점은 해당 패키지가 필요한 시점을 기준으로 나뉩니다.

node.js

dependencies

dependencies는 애플리케이션이 실행될 때 필요한 패키지들을 포함합니다. 이 패키지들은 애플리케이션의 실제 동작에 필수적이며, 배포된 애플리케이션이 제대로 작동하기 위해 설치되어야 합니다.

예시

{
  "name": "my-app",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.17.1",
    "mongoose": "^5.10.9"
  }
}

이 경우 expressmongoose는 애플리케이션이 실행될 때 필요하기 때문에 dependencies에 포함됩니다.

devDependencies

devDependencies는 개발 환경에서만 필요한 패키지들을 포함합니다. 이 패키지들은 애플리케이션의 코드를 작성하거나 테스트, 빌드하는 과정에서 필요하며, 실제 배포 시에는 포함되지 않는 경우가 많습니다.

예시

{
  "name": "my-app",
  "version": "1.0.0",
  "devDependencies": {
    "jest": "^26.6.3",
    "eslint": "^7.13.0"
  }
}

이 경우 jesteslint는 테스트와 코드 린팅에 필요하기 때문에 devDependencies에 포함됩니다. 실제 배포 시에는 필요하지 않습니다.

설치 및 사용

npm install 명령어를 사용하면 dependenciesdevDependencies에 정의된 모든 패키지가 설치됩니다. 하지만 --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에 포함됩니다.

이렇게 dependenciesdevDependencies를 구분하여 정의하면, 프로젝트의 의존성을 보다 명확하게 관리할 수 있습니다.

답글 남기기