웹사이트 검색

nodemon을 사용하여 Node.js 앱을 자동으로 다시 시작하는 방법


소개

Node.js에서 변경 사항을 적용하려면 프로세스를 다시 시작해야 합니다. 이렇게 하면 작업 흐름에 추가 단계가 추가됩니다. nodemon을 사용하여 프로세스를 자동으로 다시 시작하면 이 추가 단계를 제거할 수 있습니다.

nodemon은 Node 앱을 래핑하고 파일 시스템을 감시하며 자동으로 프로세스를 다시 시작하는 @rem이 개발한 명령줄 인터페이스(CLI) 유틸리티입니다.

이 문서에서는 nodemon 설치, 설정 및 구성에 대해 알아봅니다.

전제 조건

이 기사를 따라 하려면 다음이 필요합니다.

  • Node.js를 로컬에 설치했습니다. Node.js를 설치하고 로컬 개발 환경을 만드는 방법에 따라 수행할 수 있습니다.

이 튜토리얼은 Node.js v17.1.0, npm v8.1.2, nodemon v2.0.15 및 express v4.17.1에서 검증되었습니다.

1단계 — nodemon 설치

먼저 컴퓨터에 nodemon을 설치해야 합니다. npm 또는 yarn을 사용하여 프로젝트에 전역적으로 또는 로컬로 유틸리티를 설치합니다.

글로벌 설치

npm을 사용하여 nodemon을 전역적으로 설치할 수 있습니다.

  1. npm install nodemon --global

또는 원사로:

  1. yarn global add nodemon

로컬 설치

nodemon을 로컬에 설치할 수도 있습니다. 로컬 설치를 수행할 때 --save-dev(또는 --dev)를 사용하여 nodemon을 개발 종속성으로 설치할 수 있습니다.

npm을 사용하여 nodemon을 로컬에 설치합니다.

  1. npm install nodemon --save-dev

또는 원사로:

  1. yarn add nodemon --dev

로컬 설치 시 주의해야 할 한 가지는 nodemon 명령을 직접 사용할 수 없다는 것입니다.

  1. Output
    command not found: nodemon

로컬에 설치된 패키지를 실행할 수 있습니다.

  1. ./node_modules/nodemon/bin/nodemon.js [your node app]

npx에서도 사용할 수 있습니다.

이것으로 nodemon 설치 프로세스를 마칩니다.

2단계 — nodemon으로 예제 Express 프로젝트 설정

nodemon을 사용하여 노드 스크립트를 시작할 수 있습니다. 예를 들어 server.js 파일에 Express 서버 설정이 있는 경우 nodemon을 시작하고 다음과 같은 변경 사항을 확인할 수 있습니다.

  1. nodemon server.js

Node로 스크립트를 실행하는 것과 같은 방식으로 인수를 전달할 수 있습니다.

  1. nodemon server.js 3006

기본 감시 확장자(.js, .mjs, .json, ) 중 하나를 사용하여 파일을 변경할 때마다 .coffee 또는 .litcoffee)가 현재 디렉터리 또는 하위 디렉터리에 있는 경우 프로세스가 다시 시작됩니다.

다음 메시지를 출력하는 예제 server.js 파일을 작성해 보겠습니다. Dolphin app listening on port &#36 {port}!.

const express = require('express')
const app = express()
const port = 3000

app.listen(port, ()=> console.log(`Dolphin app listening on port ${port}!`))

nodemon을 사용하여 예제를 실행합니다.

  1. nodemon server.js

터미널 출력에 다음이 표시됩니다.

Output
[nodemon] 2.0.15 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): *.* [nodemon] watching extensions: js,mjs,json [nodemon] starting `node server.js` Dolphin app listening on port 3000!

nodemon이 실행되는 동안 server.js 파일을 변경해 보겠습니다. 출력을 다른 메시지로 변경: Shark app listening on port $ {port}!.

터미널 출력에 다음이 표시됩니다.

Output
[nodemon] restarting due to changes... [nodemon] starting `node server.js` Shark app listening on port 3000!

Node.js 앱의 터미널 출력에 새로운 변경 사항이 표시됩니다.

rs를 입력하고 ENTER를 눌러 언제든지 프로세스를 다시 시작할 수 있습니다.

또는 nodemon은 프로젝트의 package.json 파일에 지정된 main 파일도 찾습니다.

{
  // ...
  "main": "server.js",
  // ...
}

main 파일이 지정되지 않은 경우 nodemonstart 스크립트를 검색합니다.

{
  // ...
  "scripts": {
    "start": "node server.js"
  },
  // ...
}

package.json을 변경하면 nodemon을 호출하여 server.js.

3단계 - 옵션 사용

nodemon에 사용 가능한 구성 설정을 수정할 수 있습니다.

몇 가지 주요 옵션을 살펴보겠습니다.

  • --exec: --exec 스위치를 사용하여 파일을 실행할 바이너리를 지정합니다. 예를 들어 ts-node 바이너리와 결합하면 --exec가 변경 사항을 감시하고 TypeScript 파일을 실행하는 데 유용할 수 있습니다.
  • --ext: 감시할 다른 파일 확장자를 지정합니다. 이 스위치의 경우 쉼표로 구분된 파일 확장명 목록을 제공합니다(예: --ext js,ts).
  • --delay: 기본적으로 nodemon은 파일이 변경될 때 프로세스를 다시 시작하기 위해 1초 동안 대기하지만 --delay 스위치, 다른 지연을 지정할 수 있습니다. 예를 들어 nodemon --delay 3.2는 3.2초 지연입니다.
  • --watch: --watch 스위치를 사용하여 감시할 여러 디렉토리 또는 파일을 지정합니다. 감시하려는 각 디렉토리에 대해 하나의 --watch 스위치를 추가하십시오. 기본적으로 현재 디렉터리와 그 하위 디렉터리가 감시되므로 --watch를 사용하여 특정 하위 디렉터리나 파일로만 범위를 좁힐 수 있습니다.
  • --ignore: --ignore 스위치를 사용하여 특정 파일, 파일 패턴 또는 디렉터리를 무시합니다.
  • --verbose: 다시 시작을 트리거하기 위해 변경된 파일에 대한 정보가 포함된 보다 자세한 출력입니다.

다음 명령으로 사용 가능한 모든 옵션을 볼 수 있습니다.

  1. nodemon --help

이러한 옵션을 사용하여 다음 시나리오를 충족하는 명령을 생성해 보겠습니다.

  • server 디렉토리 감시
  • .ts 확장자로 파일 지정
  • .test.ts 접미사가 있는 파일 무시
  • ts-node로 파일(server/server.ts) 실행
  • 파일 변경 후 다시 시작하기 위해 3초 동안 대기

  1. nodemon --watch server --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 server/server.ts

터미널 출력에 다음이 표시됩니다.

Output
[nodemon] 2.0.15 [nodemon] to restart at any time, enter `rs` [nodemon] watching path(s): server [nodemon] watching extensions: ts [nodemon] starting `ts-node server/server.ts`

이 명령은 --watch, --ext, --exec, --ignore--delay 시나리오 조건을 충족하는 옵션.

4단계 - 구성 사용

이전 예에서 nodemon을 실행할 때 구성 스위치를 추가하는 것은 지루할 수 있습니다. 복잡한 구성이 필요한 프로젝트에 대한 더 나은 솔루션은 nodemon.json 파일에서 이러한 옵션을 정의하는 것입니다.

예를 들어, 다음은 이전 명령줄 예제와 동일한 구성이지만 nodemon.json 파일에 배치됩니다.

{
  "watch": [
    "server"
  ],
  "ext": "ts",
  "ignore": [
    "*.test.ts"
  ],
  "delay": "3",
  "execMap": {
    "ts": "ts-node"
  }
}

--exec 스위치 대신 execMap을 사용합니다. execMap을 사용하면 특정 파일 확장자에 대한 바이너리를 지정할 수 있습니다.

또는 프로젝트에 nodemon.json 구성 파일을 추가하지 않으려면 이러한 구성을 nodemonConfig< 아래의 package.json 파일에 추가할 수 있습니다. /코드> 키:

{
  "name": "nodemon-example",
  "version": "1.0.0",
  "description": "",
  "nodemonConfig": {
    "watch": [
      "server"
    ],
    "ext": "ts",
    "ignore": [
      "*.test.ts"
    ],
    "delay": "3",
    "execMap": {
      "ts": "ts-node"
    }
  },
  // ...

nodemon.json 또는 package.json을 변경하면 원하는 스크립트로 nodemon을 시작할 수 있습니다.

  1. nodemon server/server.ts

nodemon은 구성을 선택하고 사용합니다. 이렇게 하면 명령줄에서 복사 및 붙여넣기 또는 입력 오류를 방지하기 위해 구성을 저장, 공유 및 반복할 수 있습니다.

결론

이 기사에서는 Node.js 애플리케이션에서 nodemon을 사용하는 방법을 살펴보았습니다. 이 도구는 변경 사항을 보기 위해 노드 서버를 중지하고 시작하는 프로세스를 자동화하는 데 도움이 됩니다.

사용 가능한 기능 및 문제 해결 오류에 대한 자세한 내용은 공식 문서를 참조하십시오.

Node.js에 대해 자세히 알아보려면 Node.js 주제 페이지에서 실습 및 프로그래밍 프로젝트를 확인하세요.