nodemon -v
: 1.17.4node -v
: v10.1.0nodemon --expose-gc --inspect=0.0.0.0:9228 --legacy-watch --delay 250ms --watch webpack.config.js node_modules/.bin/webpack-dev-server --mode development --host 0.0.0.0 --port 80
νμΌμ΄ λ³κ²½λλ©΄ "νμ¬ μμ© νλ‘κ·Έλ¨μ μ€μ§νκ³ μμ© νλ‘κ·Έλ¨μ μ μΈμ€ν΄μ€λ₯Ό μμνμμμ€" λ¨κ³μ λ°λΌ λ Έλ μμ© νλ‘κ·Έλ¨μ λ€μ μμν΄μΌ ν©λλ€.
μ΄μ μΈμ€ν΄μ€κ° μ€μ§λκΈ° μ μ μ ν리μΌμ΄μ μ μμνκ³ μμΌλ―λ‘ μ€ν¨νκ³ λ€μ μ€λ₯κ° νμλ©λλ€.
[nodemon] starting `node --expose-gc --inspect=0.0.0.0:9228 node_modules/.bin/webpack-dev-server --mode development --host 0.0.0.0 --port 80 src/index.js`
Starting inspector on 0.0.0.0:9228 failed: address already in use
[nodemon] app crashed - waiting for file changes before starting...
κ°μλ νμΌμ΄ λ³κ²½λλ©΄ λ€μ μμλκ³ μ ν리μΌμ΄μ μΈμ€ν΄μ€λ₯Ό μ€μ§νκΈ°μ μΆ©λΆν μκ°μ΄ λκΈ° λλ¬Έμ μλν©λλ€.
webpack-dev-server, babel λ° reactλ‘ κ°λ¨ν νλ‘μ νΈλ₯Ό μμν λ€μ λ°μμ μ΄κΈ°ννλ λλ―Έ src/index.js
λ₯Ό μΆκ°νμ¬ webpack-dev-serverμ νλ‘μΈμ€λ₯Ό μ½κ° λλ¦¬κ² λ§λλλ€.
μ 곡λ λͺ
λ Ήμ μ¬μ©νμ¬ nodemonμ μμν©λλ€.
μ€ν: touch webpack.config.js
μ»΄ν¨ν°κ° λ€μμ μμνκΈ° μ μ μΈμ€ν΄μ€λ₯Ό μ€μ§ν λ§νΌ μΆ©λΆν λΉ λ₯΄μ§ μμΌλ©΄ μ€ν¨ν μ μμ΅λλ€.
--inspector
νλκ·Έκ° nodemon
μ μΆκ°λ λ μκ° μ΄κ³Ό λλ κ°κ²©μ μ¬μ©νμ¬ μ μΈμ€ν΄μ€λ₯Ό μμνκΈ° μ μ PIDκ° μλνμ§ μλμ§ νμΈνμ¬ μ μΈμ€ν΄μ€λ₯Ό μμνκΈ° μ μ λͺ¨λ 리μμ€λ₯Ό μ¬μ©ν μ μλμ§ νμΈνμμμ€.
ν΄λΉνλ κ²½μ° λͺ
λ Ήμ --dump
νλκ·Έλ₯Ό μΆκ°νκ³ μ¬κΈ°μ μΆλ ₯μ ν¬ν¨νμ¬ λ―Όκ°ν/κ°μΈ μΈλΆ μ 보 λλ ν ν°μ μ κ±°νλλ‘ νμμμ€ .
볡μ ν git repoλ₯Ό μ 곡νμΈμ. λλ ν¨ν€μ§ ꡬμ±μ μΆμΈ‘νμ§ μμ κ²μ λλ€ (κ·Έλ¦¬κ³ μ±κ³΅μ μΌλ‘ nodemonμΌλ‘ κ²μ¬λ₯Ό μ¬μ©νκΈ° λλ¬Έμ ꡬμ±μ΄ μ κ° μΆκ΅¬νλ κ²μ λλ€).
λν μ μ μ¬νμ΄ μμΌλ©΄ μλνλ ν μ€νΈμ ν¨κ» PRμ μ 곡νλ κ²μ΄ κ°μ₯ μ’μ΅λλ€. κ·Έκ²μ μ λμ μΌλ‘ π
μ΄λ₯Ό μ¬ννλ λ° μ¬μ©ν μ μλ 격리λ νλ‘μ νΈλ₯Ό λ§λ€ μ μλ λ°©λ²μ μκ°ν κ²μ λλ€. νμ§λ§ λ§€μ° μ΄λ €μ΄ κ²μ²λΌ 보μ λλ€. μ¬κΈ°μμλ μ±μ μ€ννκΈ° μν΄ λ΄ μ»΄ν¨ν°μμ μ¬μ© κ°λ₯ν 리μμ€λ₯Ό μ€μΌ μ μκΈ° λλ¬Έμ λ컀 컨ν μ΄λ λ΄λΆμμ μ¬νν μ μμ΅λλ€.
μλ§λ νλ‘μ νΈλ₯Ό μ§μ λλ²κΉ ν μ μμ κ²μ λλ€(κ·Έλ¦¬κ³ λ¬Έμ λ₯Ό μΌμΌν€λ νλ‘μ νΈμ νΉλ³ν κ²μ΄ μλ€κ³ μκ°νμ§λ§ λ€λ₯Έ μ¬λλ€μ΄ λ§μ°νκ² μ μ¬ν κ²μ 보μμ§λ§ κ²°μ½ λ³΅μ ν μ μλ€λ κ²μ μκ³ μμ΅λλ€).
λν DEBUG=nodemon*
λ₯Ό μ¬μ©νμ¬ μΆκ° μ 보λ₯Ό μ»μ μ μμΌλ©°, νμν κ²½μ° λλ²κ·Έ 릴리μ€λ₯Ό μννμ¬ λ¬Έμ μ μμΈμ νμ
ν μ μμ΅λλ€( kill
run.js
νμΌ)
Docker 컨ν μ΄λ λ΄μμ nodemonμ μ¬μ©νλ λμμλ μ΄ μ€λ₯κ° λ¬΄μμλ‘ νμλ©λλ€. μ€λ₯λ μμ ν μμμ μ΄λ©° μ¬ν μλ리μ€λ₯Ό λ§λ€ μ μμ΅λλ€.
컨ν
μ΄λ λ΄λΆμ DEBUG=nodemon*
envλ₯Ό μΆκ°νλ €κ³ μλν λ€μ μ€λ₯λ₯Ό μμ ν λκΉμ§ λͺ λ² λ€μ μμνμ΅λλ€.
λ€μμ μ±κ³΅μ μΈ μ¬μμμ λ‘κ·Έμ λλ€.
my_container_1 | Thu, 24 May 2018 15:30:32 GMT nodemon bus emit: restart
my_container_1 | [nodemon] restarting due to changes...
my_container_1 | Thu, 24 May 2018 15:30:33 GMT nodemon bus.emit(exit) via SIGUSR2
my_container_1 | [nodemon] starting `node --inspect=0.0.0.0:7005 src/index.js`
my_container_1 | Thu, 24 May 2018 15:30:33 GMT nodemon bus emit: exit
my_container_1 | Thu, 24 May 2018 15:30:33 GMT nodemon spawning node --inspect=0.0.0.0:7005 src/index.js
my_container_1 | Thu, 24 May 2018 15:30:33 GMT nodemon bus new listener: exit (1)
my_container_1 | Thu, 24 May 2018 15:30:33 GMT nodemon start watch on: ./,../shared/
my_container_1 | Thu, 24 May 2018 15:30:33 GMT nodemon:watch early exit on watch, still watching (2)
my_container_1 | Debugger listening on port 7005.
my_container_1 | Warning: This is an experimental feature and could change at any time.
my_container_1 | To start debugging, open the following URL in Chrome:
my_container_1 | chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2...
λ€μμ μ€ν¨ λ‘κ·Έμ λλ€.
my_container_1 | [nodemon] restarting due to changes...
my_container_1 | Thu, 24 May 2018 15:30:47 GMT nodemon bus emit: restart
my_container_1 | Thu, 24 May 2018 15:30:47 GMT nodemon bus.emit(exit) via SIGUSR2
my_container_1 | Thu, 24 May 2018 15:30:47 GMT nodemon bus emit: exit
my_container_1 | [nodemon] starting `node --inspect=0.0.0.0:7005 src/index.js`
my_container_1 | Thu, 24 May 2018 15:30:47 GMT nodemon spawning node --inspect=0.0.0.0:7005 src/index.js
my_container_1 | Thu, 24 May 2018 15:30:47 GMT nodemon bus new listener: exit (1)
my_container_1 | Thu, 24 May 2018 15:30:47 GMT nodemon start watch on: ./,../shared/
my_container_1 | Thu, 24 May 2018 15:30:47 GMT nodemon:watch early exit on watch, still watching (2)
my_container_1 | Unable to open devtools socket: address already in use
my_container_1 | [nodemon] app crashed - waiting for file changes before starting...
μΆκ°λ‘ λμμ΄ νμνλ©΄ μλ €μ£ΌμΈμ.
ν¬νΈλ₯Ό μ¬μ©ν μ μμ λκΉμ§ μ€ν°μ λ€μ μλνλ κ²μ΄ λ λ§μ μκ° λμ ν¬νΈλ₯Ό μ¬μ©νλλ‘ νλ λ¬Έμ λ₯Ό μ°Ύμ λκΉμ§ μ’μ ν΄κ²° λ°©λ²μ΄ λ μ μμ΅λλ€. κ·Έλ° λ€μ bus: exit
κ° λ°©μΆλ©λλ€.
μ΄ λ¬Έμ λ μ΅κ·Ό νλμ΄ μμκΈ° λλ¬Έμ μ ν΄ μνλ‘ μλ νμλμμ΅λλ€. λ μ΄μ νλμ΄ λ°μνμ§ μμΌλ©΄ μλμΌλ‘ λ«νλλ€. μ΄κ²μ΄ μλͺ»λμλ€κ³ μκ°νκ±°λ λ¬Έμ κ° μ¬μ ν μ§μλλ κ²½μ° λκΈμ λ΅μ₯μ μ
λ ₯νλ©΄ @remy κ° (μλ!) νμ μ‘°μΉλ₯Ό μ·¨ν κ²μ
λλ€.
κΈ°μ¬ν΄μ£Όμ
μ κ°μ¬ν©λλ€ <3
λλ λν Docker 컨ν μ΄λ(Windowsμ© Docker) λ΄λΆμμ μ΄κ²μ μ€ννκ³ μμ΅λλ€.
μλ νμΈμ @remy , μ λ μ΄ λ¬Έμ μ λ€λ₯Έ λ¬Έμ λ₯Ό κ²ͺκ³ μμ΅λλ€.
λ
Έλ: 9.10.1
npm: 6.1.0
λ
Έλλͺ¬: 1.17.5
μ΄μ 체μ : μλμ° 10
μ€νν λͺ
λ Ή: nodemon μ±
λ΄ μ μ₯μμ λν λ§ν¬λ λ€μκ³Ό κ°μ΅λλ€. https://github.com/AlexanderYW/uptime
μ΄ μ€λ₯κ° λ°μν©λλ€.
λμΌν λ¬Έμ κ° λ°μνμ΅λλ€.
# 1050μμ λλ κ·Έ μ견 μ ν΄κ²° λ°©λ²μ μλνμ΅λλ€.
nodemon --delay 80ms --exec 'fuser -k 56745/tcp; node --inspect=0.0.0.0:56745 ./app/http.js'
ν¬ ν¬νΈ λ₯Ό ν¨μ λ‘ κ΅μ²΄
μ΄ λ¬Έμ λ₯Ό ν΄κ²°λ κ²μΌλ‘ νμν μ μμ΅λκΉ? λ°λ‘ κ·Έμͺ½μ).
μ΄κ²μ μμ£Ό 묻λ μ§λ¬Έμ μΆκ°νκ² λμ΄ κΈ°μ©λλ€.
(FAQμ μΆκ°λ¨)
λ€μμ μ΄ λ¬Έμ λ₯Ό 볡μ νλ 리ν¬μ§ν 리μ λλ€. https://github.com/darkobits/nodemon-restart-issue.
Nodemonμ μ νλ‘μΈμ€λ₯Ό μμνκΈ° μ μ μ΄μ νλ‘μΈμ€κ° μμ ν μ’ λ£λκΈ°λ₯Ό κΈ°λ€λ¦¬λ κ²μ΄ μλλΌ Docker 컨ν μ΄λμ μμ λ _only_, λλ²κ·Έ λͺ¨λκ° νμ±νλ λ _only_ κΈ°λ€λ¦¬λ κ² κ°μ΅λλ€.
λΆλͺ
ν νκΈ° μν΄: --inspect
_does_ κ° μμΌλ©΄ μ΄μ νλ‘μΈμ€μμ μ¬μ ν μ¬μ© μ€μΈ λμΌν ν¬νΈμμ μλ²λ₯Ό μ΄λ €κ³ νκΈ° λλ¬Έμ μ νλ‘μΈμ€κ° μ¦μ μΆ©λνμ§λ§ μ΄κ²μ λ¨μ§ λ€μμ λΆμμ©μΌ λΏμ
λλ€. μ΄ λ¬Έμ . Docker 컨ν
μ΄λμμλ --inspect
νλκ·Έκ° μ κ±°λλ©΄ Nodemonμ μ΄μ νλ‘μΈμ€κ° μ’
λ£λ λκΉμ§ μ¬λ°λ₯΄κ² κΈ°λ€λ¦¬μ§λ§ 컨ν
μ΄λ λ΄λΆμμ --inspect
λ₯Ό μ¬μ©ν λ Nodemonμ κΈ°λ€λ¦¬μ§ _νμ§ μμ΅λλ€. νλ‘μΈμ€λ₯Ό μ’
λ£ν©λλ€.
μ΄κ² λμμ΄ λκΈΈ λ°λλ€.
PS -- π Remyμ μ΄ νμμ μΈ νλ‘μ νΈμ κΈ°μ¬ν λ€λ₯Έ 곡νμ. πΈ
@darkobits λ³΄κ³ μλ λ΄μ©μ λν΄ μλ‘μ΄ λ¬Έμ λ₯Ό μμνλ κ²μ΄ μ’μ΅λλ€(볡μ ν μ μ₯μκ° μμΌλ―λ‘ νΉν μ μ©ν¨). λλ μλ‘μ΄ λ¬Έμ λ₯Ό λ€λ£¨λ κ²μ μ νΈν©λλ€(νΉν μλ‘μ΄ λ°κ²¬μ λ§κ°νκ³ λ³΄κ³ ν μ΄νλ‘ λ§μ μκ°μ΄ νλ μ λ).
repo 볡μ μ λ€μ νλ² κ°μ¬λ립λλ€ π
μ΄κ²μ λ컀 μΈλΆμμ λμκ² λ°μν©λλ€. https://github.com/nomcopter/nodemon-no-wait-repro
nodemon.jsonμ "signal": "SIGINT"
λ₯Ό μΆκ°νλ©΄ μ΄ λ¬Έμ κ° ν΄κ²°λμμ΅λλ€.
@Christilut μ νΈ SIGINTλ₯Ό nodemon.jsonμ μΆκ°νλ©΄ κ³μ λ€μ μμλμ§λ§ μ€λ₯λ μ¬λΌμ§μ§λ§ μ΄κ²λ μ’μ ν΄κ²°μ± μ μλλλ€. μ νΈ μ νΈκ° μ μ΄κ²μ μΌμΌν¬ μ μλμ§ μκ³ μμ΅λκΉ?
μ λͺ¨λ₯΄κ² μ§λ§ μ΄κ²μ λ΄κ° μ¬μ©νλ μ 체 ꡬμ±μ λλ€. μλ§λ λμμ΄ λ κ²μ λλ€.
nodemon.json
{
"restartable": "rs",
"ignore": [
".git",
"node_modules/**/node_modules"
],
"verbose": false,
"execMap": {
"ts": "node --require ts-node/register"
},
"watch": [
"server/",
"config/"
],
"ext": "json,ts",
"signal": "SIGINT"
}
(NPM μ€ν¬λ¦½νΈλ‘) μμ: nodemon --inspect server/index.ts
κ·Έλμ ν¨μ λ₯Ό μ¬μ©ν νΈλ¦μ΄ μ μκ² ν¨κ³Όμ μ΄μμ΅λλ€.
κ·Έλ¬λ λλλ‘ μ νλ‘μΈμ€λ₯Ό μμνκΈ° μ μ νλ‘μΈμ€λ₯Ό μ’
λ£νμ§ λͺ»ν μλ μμ΅λλ€.
κ·Έλμ μ΄μ νλ‘μΈμ€κ° νμ€ν μ’
λ£λ λκΉμ§ κ³μ μ§ννμ§ μλλ‘ while 루νλ₯Ό μ¬μ©νμ¬ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
λ΄ μ루μ μ λ€μκ³Ό κ°μ΅λλ€.
nodemon --delay 100ms --exec 'while [ -n "$(fuser -k 9229/tcp)" ]; do sleep 0.1; done; node --inspect=0.0.0.0:9229 ./src/app.js'
μ΄κ²μ΄ λ―Έλμ λκ΅°κ°λ₯Ό λκΈ°λ₯Ό λ°λλλ€.
μ νΈλ₯Ό κΈ°μ΄νκ² SIGINT
λ‘ λ³κ²½ν΄λ λ¬Έμ κ° ν΄κ²°λ©λλ€. νΌν©μ Dockerκ° μμ΅λλ€.
SIGINTλ₯Ό μ¬μ©ν ν nodemonμ λ€μ μμλμ§λ§ λλ²κ±°κ° μ°κ²°λκ³ νλ‘μΈμ€κ° μΌμ μ€μ§λλ©΄ νλ‘μΈμ€λ₯Ό μ’ λ£ν μ μμ΅λλ€(μ¦, μ¬μ©μκ° νμ¬ μ½λλ₯Ό ν΅ν΄ μ€ν ν μ€).
λ΄ package.json ꡬμ±:
"start:dev": "nodemon --exec node --inspect=0.0.0.0:5860 ."
},
"nodemonConfig": {
"ignore": [
".git",
"cache/*",
"logs/*"
],
"env": {
"NODE_ENV": "test"
},
"signal": "SIGINT",
"verbose": true
},
κ°μ₯ μ μ©ν λκΈ
λμΌν λ¬Έμ κ° λ°μνμ΅λλ€.
# 1050μμ λλ κ·Έ μ견 μ ν΄κ²° λ°©λ²μ μλνμ΅λλ€.
ν¬ ν¬νΈ λ₯Ό ν¨μ λ‘ κ΅μ²΄