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
을 전역적으로 설치할 수 있습니다.
- npm install nodemon --global
또는 원사
로:
- yarn global add nodemon
로컬 설치
nodemon
을 로컬에 설치할 수도 있습니다. 로컬 설치를 수행할 때 --save-dev
(또는 --dev
)를 사용하여 nodemon
을 개발 종속성으로 설치할 수 있습니다.
npm
을 사용하여 nodemon
을 로컬에 설치합니다.
- npm install nodemon --save-dev
또는 원사
로:
- yarn add nodemon --dev
로컬 설치 시 주의해야 할 한 가지는 nodemon
명령을 직접 사용할 수 없다는 것입니다.
- Outputcommand not found: nodemon
로컬에 설치된 패키지를 실행할 수 있습니다.
- ./node_modules/nodemon/bin/nodemon.js [your node app]
npx에서도 사용할 수 있습니다.
이것으로 nodemon
설치 프로세스를 마칩니다.
2단계 — nodemon으로 예제 Express 프로젝트 설정
nodemon
을 사용하여 노드 스크립트를 시작할 수 있습니다. 예를 들어 server.js
파일에 Express 서버 설정이 있는 경우 nodemon
을 시작하고 다음과 같은 변경 사항을 확인할 수 있습니다.
- nodemon server.js
Node로 스크립트를 실행하는 것과 같은 방식으로 인수를 전달할 수 있습니다.
- nodemon server.js 3006
기본 감시 확장자(.js
, .mjs
, .json
, ) 중 하나를 사용하여 파일을 변경할 때마다 .coffee
또는 .litcoffee
)가 현재 디렉터리 또는 하위 디렉터리에 있는 경우 프로세스가 다시 시작됩니다.
다음 메시지를 출력하는 예제 server.js
파일을 작성해 보겠습니다. Dolphin app listening on port $ {port}!
.
const express = require('express')
const app = express()
const port = 3000
app.listen(port, ()=> console.log(`Dolphin app listening on port ${port}!`))
nodemon
을 사용하여 예제를 실행합니다.
- 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
파일이 지정되지 않은 경우 nodemon
은 start
스크립트를 검색합니다.
{
// ...
"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
: 다시 시작을 트리거하기 위해 변경된 파일에 대한 정보가 포함된 보다 자세한 출력입니다.
다음 명령으로 사용 가능한 모든 옵션을 볼 수 있습니다.
- nodemon --help
이러한 옵션을 사용하여 다음 시나리오를 충족하는 명령을 생성해 보겠습니다.
server
디렉토리 감시.ts
확장자로 파일 지정.test.ts
접미사가 있는 파일 무시ts-node
로 파일(server/server.ts
) 실행- 파일 변경 후 다시 시작하기 위해 3초 동안 대기
- 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
을 시작할 수 있습니다.
- nodemon server/server.ts
nodemon
은 구성을 선택하고 사용합니다. 이렇게 하면 명령줄에서 복사 및 붙여넣기 또는 입력 오류를 방지하기 위해 구성을 저장, 공유 및 반복할 수 있습니다.
결론
이 기사에서는 Node.js 애플리케이션에서 nodemon
을 사용하는 방법을 살펴보았습니다. 이 도구는 변경 사항을 보기 위해 노드 서버를 중지하고 시작하는 프로세스를 자동화하는 데 도움이 됩니다.
사용 가능한 기능 및 문제 해결 오류에 대한 자세한 내용은 공식 문서를 참조하십시오.
Node.js에 대해 자세히 알아보려면 Node.js 주제 페이지에서 실습 및 프로그래밍 프로젝트를 확인하세요.