nodemon -v
: 1.17.3node -v
: 8.10.0nodemon app.js
λμΌν http μλ²(νΈμ€νΈ λ° μλ²)λ₯Ό μ¬μ©νμ¬ λ³κ²½ μ¬νμ΄ μλ κ²½μ° μ±μ λ€μ μμν΄μΌ ν©λλ€.
μ±μ λ€μ μμνμ§λ§ EADDRINUSEλΌλ μ€λ₯κ° λ°μν©λλ€.
app.js
λ° dummy.js
app.js
κ° dummy.js
μꡬνλλ‘ νμμμ€.nodemon app.js
dummy.js
μμ λ° μ μ₯볡μ ν μ μμ:
// app.js
require('./dummy.js');
require('express')().listen(3000);
λλ ν 리 ꡬ쑰(node_modules μ μΈ) - λν μ μ nodemon.jsonμ΄ μλνμ§ μλλ€λ μ μ μ μνμμμ€.
β― tre
1 .
2 βββ app.js
3 βββ dummy.js
4 βββ package-lock.json
5 βββ package.json
6
7 0 directories, 4 files
κ΅¬μ± λ€ν:
--------------
node: v8.9.1
nodemon: master: aa18c806b37715a5b13aa7660e098f1fe7319a1c (1 dirty files)
command: /Users/remy/.nvm/versions/node/v8.9.1/bin/node /Users/remy/.nvm/versions/node/v8.9.1/bin/nodemon --dump
cwd: /Users/remy/Sites/nodemon/issues/1316
OS: darwin x64
--------------
{ run: false,
system: { cwd: '/Users/remy/Sites/nodemon/issues/1316' },
required: false,
dirs: [ '/Users/remy/Sites/nodemon/issues/1316' ],
timeout: 1000,
options:
{ dump: true,
ignore:
[ '**/.git/**',
'**/.nyc_output/**',
'**/.sass-cache/**',
'**/bower_components/**',
'**/coverage/**',
'**/node_modules/**',
re: /.*.*\/\.git\/.*.*|.*.*\/\.nyc_output\/.*.*|.*.*\/\.sass\-cache\/.*.*|.*.*\/bower_components\/.*.*|.*.*\/coverage\/.*.*|.*.*\/node_modules\/.*.*/ ],
watch: [ '*.*', re: /.*\..*/ ],
ignoreRoot:
[ '**/.git/**',
'**/.nyc_output/**',
'**/.sass-cache/**',
'**/bower_components/**',
'**/coverage/**',
'**/node_modules/**' ],
restartable: 'rs',
colours: true,
execMap: { py: 'python', rb: 'ruby' },
stdin: true,
runOnChangeOnly: false,
verbose: false,
signal: 'SIGUSR2',
stdout: true,
watchOptions: {},
execOptions:
{ script: 'index.js',
exec: 'node',
args: [],
scriptPosition: 0,
nodeArgs: undefined,
execArgs: [],
ext: 'js,mjs,json',
env: {} },
monitor:
[ '*.*',
'!**/.git/**',
'!**/.nyc_output/**',
'!**/.sass-cache/**',
'!**/bower_components/**',
'!**/coverage/**',
'!**/node_modules/**' ] },
load: [Function],
reset: [Function: reset],
lastStarted: 0,
loaded: [],
watchInterval: null,
signal: 'SIGUSR2',
command:
{ raw: { executable: 'node', args: [ 'index.js' ] },
string: 'node index.js' } }
--------------
λλ²κ·Ένκ³ λ΅μ μ°Ύμ μ μλλ‘ μ΄ λ¬Έμ λ₯Ό μ΄μ΄ λκ² μ΅λλ€(λ¬Έμ κ° λμ§ μλλ€κ³ κ°μ ).
μ΄μ μ μ΄ λ¬Έμ κ° λ°μνμ΅λλ€. κ·Έκ²μ μ°μ°ν μΌμ΄λ¬λ€.
IMO, μ΄λ¬ν μ’
λ₯μ λ¬Έμ λ μ¬μ©λ ν¬νΈκ° ν΄μ λκΈ° μ μ nodemonμ΄ μλ²λ₯Ό λ€μ μμνκΈ° λλ¬Έμ
λλ€.
μκ²¬μ΄ μλ 볡μ κ°λ₯ν μ¬λ‘λ‘ κ°λ³ΌκΉμ? λ²κ·Έ μμ μ λμμ΄ λ κ²μ λλ€β¦
μ΄κ²μ μΌκ΄λκ² λ³΅μ ν μ μλ κ²μ΄ μλ€λ©΄(μ¬μ§μ΄ μΈμμ μΈ λ°©μμΌλ‘λΌλ) κ·Έλ κ² ν©μλ€. κ·Έλ μ§ μμΌλ©΄ μ΄ λ¬Έμ λ μ½ μΌμ£ΌμΌ μμ μ’ λ£λ©λλ€.
μ΄κ²μ μ΅κ·Όμ λ«ν λ¬Έμ μμ λ€μ μΈκΈλμμ΅λλ€. https://github.com/remy/nodemon/issues/1025#issuecomment -381025138.
λ€λ₯Έ ν μ€νΈλ₯Ό λ§λ€μ΄λ³΄κ³ μμΈμ μ νν μ°ΎμλΌ μ μκΈ°λ₯Ό λ°λλλ€.
nodemon --watch src/theme.json --watch webpack.config.js --exec webpack-dev-server --port=4200
λ₯Ό μ€ννλ Ubuntu 16.04 nodemon 1.17.3μμλ λμΌν λ¬Έμ κ° μμ΅λλ€. Π CTRL+Cλ₯Ό ν΄λ¦νλ©΄ nodemonμ΄ μ£½μ§λ§ webpack-dev-serverλ μ£½μ§ μμ΅λλ€. webpack-dev-server
μ체λ₯Ό μ€νν λ λλ κ·Έλ¬ν λ¬Έμ μ λΉ μ§μ§ μμ΅λλ€.
@preslavsh 볡μ μ μ¬μ©ν μ μλ μΆμλ μ μ₯μλ₯Ό μ€ μ μμ΅λκΉ? μλλ©΄ ν΄λΉ μμ λ‘ μ§μ nodemonμ λλ²κ·Ένλ €κ³ νμλκΉ?
리ν¬μ§ν 리λ₯Ό 곡μ ν μλ μμ§λ§ λμ€μ λ¬Έμ λ₯Ό ν΄κ²°νκ±°λ λ€λ₯Έ νλ‘μ νΈμμ μ¬νν μλ μμ΅λλ€. κ°μ¬ν©λλ€.
λνμ΄ λ¬Έμ κ° λ°μν©λλ€. λΆννλ μ μ₯μλ₯Ό 곡μ ν μλ μμ§λ§ λμ€μ κ·νμ μμ λ₯Ό ν μ€νΈνκ³ μμ μ μ₯μμμ μμ λ₯Ό μ¬ννλ λ° μκ°μ ν μ ν μν₯μ΄ μμ΅λλ€.
[nodemon] 1.17.3
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `ts-node ./bin/www`
Starting server from bin/www
Server started at http://localhost:8080
[nodemon] restarting due to changes...
[nodemon] restarting due to changes...
[nodemon] starting `ts-node ./bin/www`
Starting server from bin/www
Error: listen EADDRINUSE :::8080
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1367:14)
at listenInCluster (net.js:1408:12)
at Server.listen (net.js:1492:7)
at Object.<anonymous> (/home/-----/bin/www:12:28)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at Object.<anonymous> (/home/-----/node_modules/ts-node/src/bin.ts:145:12)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
[nodemon] app crashed - waiting for file changes before starting...
λ
Έλ: 8.11.1
λ
Έλλͺ¬: 1.17.3
μ΄μ 체μ : λ°λΉμ 9
νΈμ§: μμ λλ―Έ μ½λλ‘ λ³΅μ λ₯Ό μλνμ§λ§ 볡μ ν μ μμ΅λλ€. λ΄ μμ μ μ μ₯μλ‘ λͺ κ°μ§ μΆκ° ν μ€νΈλ₯Ό μνν©λλ€.
@remy Nodemon νλ‘μΈμ€λ μ κ²½μ°μ λΆλͺ¨ νλ‘μΈμ€κ° μ’
λ£λ ν(Webpack λ©λͺ¨λ¦¬ λΆμ‘± λλ μ΄μ μ μ¬ν) μ μ§λ©λλ€.
λ€μ μ μ΄ κ²½μ°λ₯Ό 볡μ νλ μ½λμ
λλ€.
OP @edsamonte λ° κΈ°ν μ€μ:
μ ν리μΌμ΄μ μ μ€ννλ λ° μ΄λ€ κ²μ μ¬μ©νκ³ μμ΅λκΉ?
@jasonxia23 μ ν¨νμ§ μμ ν
μ€νΈμ
λλ€. SIGKILL
( -9
) μ νΈλ₯Ό λ£¨νΈ λ
Έλ νλ‘μΈμ€(nodemon)μ 보λ΄κ³ μμΌλ―λ‘ μμ νλ‘μΈμ€λ₯Ό μ 리ν μ μμ΅λλ€.
λ©λͺ¨λ¦¬κ° λΆμ‘±νκ³ OS μμ€μ΄ μ’ λ£λλ©΄ λ¬Έμ κ° λ°μν©λλ€. κ·Έλ¬λ μ μΆλ μ΄ μλ λ¬Έμ λ μ΄μ κ΄ν κ²μ΄ μλλΌ μ½λ κΈ°λ° λ€μ μμκ³Ό λ°±κ·ΈλΌμ΄λμμ μ¬μ ν μ€ν μ€μΈ νμ νλ‘μΈμ€μ κ΄ν κ²μ λλ€(μ£μ‘ν©λλ€. λ€μ μλν΄μΌ ν¨).
νμ¬ μ΄ λ²κ·Έλ₯Ό 볡μ νλ λ°©λ²μ λν μ§μΉ¨μ μμ§ μμ΅λλ€.
κ°μ λ¬Έμ κ° μμ΅λλ€.
μ΄κ²μ μλ²λ₯Ό μ€ννλ μκ°λΆν° λ΄ ν°λ―Έλμ
λλ€.
β dev-connector git:(models-and-authentication) β npm run server
> [email protected] server /home/logan/dev/dev-connector
> nodemon server.js
[nodemon] 1.17.3
[nodemon] to restart at any time, enter 'rs'
[nodemon] watching: *.*
[nodemon] starting 'node server.js'
Server running on port 5000
MongoDB Connected
//SAVING NEW FILE OCCURS HERE.
[nodemon] restarting due to changes...
[nodemon] starting node server.js
events.js:183
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE :::5000
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1367:14)
at listenInCluster (net.js:1408:12)
at Server.listen (net.js:1492:7)
at Function.listen (/home/logan/dev/dev-connector/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/home/logan/dev/dev-connector/server.js:33:5)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
[nodemon] app crashed - waiting for file changes before starting...
μλ ν¬μ€ν°κ° λ§ν κ² μΈμ λ΄κ° λμΈ μ μλ κ²μ΄ μλμ§ λͺ¨λ₯΄κ² μ΅λλ€.
μ΄μ 체μ : μ°λΆν¬ 16.04
nodemon 1.17.3, node 8.11μμλ μ΄ λ¬Έμ κ° λ°μν©λλ€.
nodemon --signal SIGTERM
λ€μ ν
μ€νΈνκ³ λ¬Έμ λ₯Ό 볡μ ν μ μλμ§ μ¬λΆλ₯Ό λ³΄κ³ νμΈμ.
λλ μ΄ λ¬Έμ λ₯Ό 볡μ ν μ μλ μ΄λ€ κ²λ κ°μ§κ³ μμ§ μμ΅λλ€(κ·Έλ¦¬κ³ μμ±μ μ½λ, νκ²½, κ΅¬μ± λ±μ κΈ°λ°μΌλ‘ ν λ¬Έμ κ° νΌν©λ κ²μΌλ‘ μμ¬λ©λλ€). λκ΅°κ° μ€μ€λ‘ λλ²κΉ μ μλν μ μλ€λ©΄ μ΄ λ¬Έμ λ₯Ό λλ΄μΌ ν©λλ€.
μ€λ₯κ° λ°μνμ¬ λ³΅μ ν μ μμμ΅λλ€. μ€λ₯κ° λ€μ λ°μνμ λ(ν λ²λ§ λ) killall node
λͺ
λ Ήμ μ¬μ©νκ³ κ·Έ μ΄νλ‘ μ€λ₯κ° λ°μνμ§ μμμ΅λλ€. μλ²κ° λ€μ μμλκΈ° μ μ OSκ° νλ‘μΈμ€λ₯Ό μ’
λ£νμ§ μμ μ μμ΅λλ€. κ·Έλ¬λ λλ μΆμΈ‘ν μ μμ λΏμ΄λ€. λ§μ λμμ λλ¦¬μ§ λͺ»ν΄ μ£μ‘ν©λλ€. μ λ μμ§ κ°λ° μΈκ³μ μ
λ¬Ένμ§ μΌλ§ λμ§ μμ μ΅λν λ§μ λμμ λλ¦¬λ €κ³ λ
Έλ ₯νκ³ μμ΅λλ€.
νΈμ§: μ€λ₯κ° λ°μνλ©΄ μ¦μ nodemon --signal SIGTERM
λ€μ ν
μ€νΈν©λλ€.
@LBWright κ°μ¬ν©λλ€! κ°μ λ¬Έμ κ° μμμ§λ§ killall node
νμ΅λλ€.
λμκ² λ¬Έμ λ concurrently
μ¬μ©μΌλ‘ μΈν΄ λ°μν©λλ€. λ΄κ° μ€μνμ§ μμΌλ©΄ λμμ λ«νκ³ nodemonμ΄ μμ
μ΄ μλ£λ κ²μΌλ‘ κ°μ£Όν©λλ€.
λμμ μ¬μ©νμ§ μλλΌλ nodemon μ’ λ£μ νλ‘μΈμ€ μ’ λ£μ μΆ©λλ‘ μΈν΄ κ³Όκ±°μ μ μ¬ν λ¬Έμ κ° λ§μ΄ λ°μνμ΅λλ€.
λ€μκ³Ό κ°μ΄ κ±°μ λͺ¨λ 무μλ―Έν ν¬νΈ κ΄λ ¨ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
"events": {
"restart": "fuser -k 5000/tcp ; fuser -k 3050/tcp"
}
λ³Έμ§μ μΌλ‘ μμ λ΄μ©μ "TCP ν¬νΈ 5000 λ° 3050μμ μ€ν μ€μΈ λͺ¨λ κ²μ μ’ λ£"ν©λλ€.
nodemonμ΄ μμλκΈ° μ μ μ€ν¬λ¦½νΈμ μ΄κ²μ μΆκ°ν μλ μμ΅λλ€:
# replace with your own ports
fuser -k 5000/tcp
fuser -k 3050/tcp
λν μ΄κ²μ nodemon λͺ λ Ήμ μΆκ°ν΄μΌ ν©λλ€.
--delay 1500ms
μ§μ°μ΄ μμΌλ©΄ 10λ² μ€ 2λ²μ ν¬νΈ μΆ©λμ΄ λ°μν©λλ€.
μ§μ°μ λν λͺ¨λ μλ‘μ΄ λ³κ²½ μ¬νμ μ¬μ€μ νκΈ° λλ¬Έμ nodemonμ΄ λ€μ μμνλ μ€νΈμ λ°©μ§ν©λλ€(μΆ©λμ μΌμΌν€λ λ λ€λ₯Έ κ²μ λ°©μ§).
λ€μ μμνκΈ° μ μ ν¬νΈλ₯Ό μ£½μ΄λ κΈ°λ₯μ΄ λ΄μ₯λ κ²μ΄λΌλ©΄(ν λ²μ μ¬λ¬ μ€ν¬λ¦½νΈλ₯Ό μ€νν μ μλ κΈ°λ₯κ³Ό ν¨κ») λ μ’μ κ²μ λλ€.
cc @λ λ―Έ
@srcspiderλ κ°μ¬ν©λλ€. λλ OPκ° λμμ μ¬μ©νμ§ μλλ€λ κ²μ μκ³ μμ§λ§ λμμ λ€λ₯Έ λ¬Έμ μμ λͺ κ°μ§ λ¬Έμ λ₯Ό μΌμΌν€κ³ μλ€λ κ²μ _μκ³ μμ΅λλ€_.
PRμ μ΄μ΄ μ΄κ²μ FAQμ μΆκ°νμκ² μ΅λκΉ? λ€λ₯Έ λΆλ€μκ² μ μ©ν νμ λλ€. λ€μ νλ² κ°μ¬ν©λλ€.
λꡬλ μ§ μ΄ λ¬Έμ λ₯Ό 볡μ νλ €λ μλλ₯Ό μ μν μ μμ λκΉμ§ μμΌλ‘ λͺ μκ° λ΄μ μ΄ λ¬Έμ λ₯Ό μ’ λ£νκ² μ΅λλ€. μ¬λλ€μ΄ μ΄ λ¬Έμ μ μ§λ©΄ν λ§νΌ λλ μμ§ λ³΅μ λ₯Ό κ³μνκΈ°μ μΆ©λΆνμ΅λλ€.
λλ λν μ΄κ²μ΄ λ°μν μ μλ λ°©λ²μ΄ μμ κ°μ§ μλ€λ μ μ κ°μ¬νμ§λ§(νμ νλ‘μΈμ€κ° μ°κ²°μ λ«κ³ κ³μ μ€νλλ κ²μ κ±°λΆν¨), μΈμμ μΈ ν μ€νΈμμλ 볡μ ν μ μμ΅λλ€(ν¬νΈλ₯Ό μΆ©λΆν λͺ¨λ₯΄κΈ° λλ¬ΈμΌ μ μμ).
λλ μ§μ μΌλ‘ μ΄ λ¬Έμ μ λν κ΄μ¬μ μ»κΈ°λ₯Ό λ°λΌκ³ μμ΅λλ€.
ν μ€νΈν λμμ΄ μλ ν λꡬλ μ§ μ΄ μ£Όμ λ‘ μ λ¬Έμ λ₯Ό λ§λ€ μ μμ΄ κΈ°μ©λλ€.
κ°μ¬ν©λλ€.
λ«ν λ¬Έμ λ₯Ό μ κΈ°ν΄μ μ£μ‘ν©λλ€. @srcspiderκ° μμ μμ μ¬νμ μΈκΈνκΈ° λλ¬Έμ
ν΄κ²° λ°©λ²μ λμνλ―λ‘ cc @remy
λ³κ²½ μ¬νμ μ μ₯ ν ν nodemonμ΄ λΉλλ₯Ό λ€μλ‘λνκ³ EADDRINUSE λ¬Έμ λ‘ μΈν΄ μΆ©λνλ κ²κ³Ό κ°μ μ€λ₯κ° λ°μνμ΅λλ€.
λλ 1.14.1μ μ¬μ©νκ³ μμκ³ * νλ©΄ μ€λ₯κ° μμ λμ΄ μ΄μ μννκ² μλν©λλ€.
μ΄μ λΉμ μ΄ κ·Έκ²μ μΈκΈνκΈ° λλ¬Έμ λλ κ½€ μ€λ«λμ μ€λ₯λ₯Ό λ³΄μ§ λͺ»νλ€κ³ μκ°ν©λλ€.
--signal SIGTERM
μΆκ°νμ¬ μμ ν κ²κ³Ό λμΌν λ¬Έμ κ° μμμ΅λλ€.
--delay 1500ms
μΆκ°νλ©΄ μ£Όμ μ¬μ©μ λ°©μ§ν μ μμ΅λλ€. @srcspider κ°μ¬
λ΄ μ루μ :
nodemon.json
{
"execMap": {
"js": "babel-node"
},
"env": {
"NODE_ENV": "development"
},
"ext": ".js,.jsx",
"ignore": [
"test",
"dist",
"docs",
"logs"
],
"events": {
"start": "sh nodemon.sh"
},
"script": "./src/server.js",
"restartable": "rs",
"verbose": false,
"watch": ["src"],
"stdin": false,
"stdout": true,
"quiet": true,
"colours": true
}
nodemon.sh
PID=$(ps aux | grep _babel-node | sed -n '2p' | awk '{print $2}');
if [ ! -z "$PID" ]; then
{ kill -9 $PID && wait $PID; } 2>/dev/null;
fi;
src/server.js
import { exec } from 'child_process';
/* ...skipped for brevity... */
process.on('uncaughtException', (err) => {
if (/EADDRINUSE/.test(err.message)) {
exec(`sh nodemon.sh`);
} else {
console.error("uncaughtException:", err.message);
}
});
// or better:
server.on('error', err => {
if (err.code === 'EADDRINUSE') {
exec(`sh nodemon.sh`);
}
});
νΈλ¦μ λ€μ μμ/μΆ©λν λκ° μλλΌ nodemonμ΄ μμν λλ§λ€ ν¬νΈλ₯Ό μ’ λ£νλ κ²μ λλ€.
λλ exec() λμ process.exit()λ₯Ό μ¬μ©νκ³ μ μλν©λλ€. κ°μ¬ ν΄μ!
λλ μ€λμ΄ λ¬Έμ λ₯Ό κ²½ννμΌλ©° μ½μμμ μ§μ nodemon
μ€νν λ 맀λ ₯μ²λΌ μλνμ§λ§ λ€μκ³Ό κ°μ λ
Έλλ₯Ό μ¬μ©ν λ
"scripts": {
"debug": "nodemon"
}
λλ κ·Έ μ€λ₯λ₯Ό μ»μλ€
[nodemon] restarting due to changes...
Error: listen EADDRINUSE :::5000
at Object._errnoException (util.js:1022:11)
at _exceptionWithHostPort (util.js:1044:20)
at Server.setupListenHandle [as _listen2] (net.js:1367:14)
at listenInCluster (net.js:1408:12)
at Server.listen (net.js:1492:7)
at Function.listen (/home/logan/dev/dev-connector/node_modules/express/lib/application.js:618:24)
at Object.<anonymous> (/home/logan/dev/dev-connector/server.js:33:5)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3
[nodemon] app crashed - waiting for file changes before starting...
Node.js μ€νμΌ μ루μ (Mac, Linux, Windowsμμ μλ):
yarn add kill-port
nodemon.json
:
{
"events": {
"restart": "kill-port 5000",
"crash": "kill-port 5000"
},
"delay": "1500"
}
ν¬νΈ κ΅μ²΄:
"restart": "kill-port [my port]",
Remy, λλ μ΄κ²μ 볡μ νλ μλΉν μ΅μνμ repoλ₯Ό λ§λ€ μ μμλ€κ³ λ―Ώμ΅λλ€ . https://github.com/chrisveness/koa-hello-worldλ₯Ό μ°Έμ‘°
μ μκ² μ΄ λ¦¬ν¬μ§ν 리λ μ½λ λ³κ²½ μ Error: listen EADDRINUSE :::3000
λ₯Ό νΈλ¦¬κ±°ν©λλ€. λλ μ κ±°νλ©΄ -r dotenv/config
λ‘λΆν° μ΅μ
start-dev
μμ μ€ν¬λ¦½νΈ package.json
, λͺ¨λ κ²μ΄ μ μλν©λλ€.
Linux Mint 18(Ubuntu 16.04 β Xenial)μμ Node v10.13.0μ μ€ννκ³ μμ΅λλ€.
@remy nestjs
μν νλ‘μ νΈλ₯Ό ν΅ν΄ 볡μ κ°λ₯:
λ€μ€νΈ λ¬Έμ: https://docs.nestjs.com/first-steps
$ npm i -g @nestjs/cli
$ nest new project
μν νλ‘μ νΈμμ .ts νμΌμ μ
λ°μ΄νΈνλ©΄ Error: listen EADDRINUSE
λ΄ νκ²½: MacOSοΌλ Έλ v10.9.0, "nodemon": "^1.18.6",
@forsigner nest,jsμ λμΌν μ€λ₯
npm ν¨ν€μ§ λμ μ΄κ²μ μ¬μ©νμ΅λλ€.
events": {
"restart": "kill $(lsof -t -i:4444)",
"crash": "kill $(lsof -t -i:4444)"
}
리λ μ€μμ μλ
@nzvtrk lsof -t -i:4444
μ΄(κ°) 무μμ νκ³ μκ³ μ΄ μ루μ
μ΄ μ΄λ»κ² μλνλμ§ μμΈν μ€λͺ
νμκ² μ΅λκΉ?
lsof
λ Unixμ μ μ¬νλ―λ‘ Windowsμμλ μ΄ λͺ
λ Ήμ μ¬μ©ν μ μμ΅λλ€. kill-port
κ° λ λμ μ루μ
μ΄λΌκ³ μκ°ν©λλ€.
FWIW, μ΄κ²μ μμ¬ μ€ν¬λ¦½νΈ( "test-watch": "nodemon --exec 'yarn test'"
)λ₯Ό ν΅ν΄ nodemonμ μ€νν λλ§ λ°μν©λλ€.
nodemon --exec 'yarn test'"
μ§μ μ€ννλ©΄ λ°μνμ§ μμ΅λλ€.
λμκ² κ·Έκ²μ λ΄κ° μμ¬ μ€ν¬λ¦½νΈλ₯Ό ν΅ν΄ μ€νλλ μ΅μ λ²μ μ nodemonκ³Ό ν¨κ» Babelμ μ¬μ©ν λλ§ λ°μν©λλ€.
1.13.3 - λ§μ§λ§ μμ
λ²μ
1.14.0 - λͺ¨λ νμ λ²μ μμ μ€λ¨λ¨
λλ κ°μ λ¬Έμ κ° μμκ³ μ΅μ λ²μ - 1.18.7μμ μ΄κ²μ΄ μμ λ κ² κ°μ΅λλ€. 건배!!
μ, [email protected] λ μ λ₯Ό μν΄ μμ ν κ² κ°μ΅λλ€. μμ²λ!
λ€! 1.18.7μ΄ μλν©λλ€!
1.18.7μ μ¬κΈ°μ λμΌν λ¬Έμ κ° μμ΅λλ€.
λμκ² μ νν μ€λ₯κ° νμλμ§λ§(@1.18.7) λλ¨Έμ§λ λͺ¨λ μλν©λλ€(μ½λ μ λ°μ΄νΈ).
μνκΉκ²λ μ΄ λ¬Έμ λ‘ μΈν΄ λ μ΄μ nodemonμ μ¬μ©ν μ μμ΅λλ€. μ΄μ μΈμ€ν΄μ€λ₯Ό taskkillνμ§ μλ ν λ§€λ² λ°μν©λλ€. μ λ μλμ° 7μ λλ€.
@forsigner κ° μ μν μ루μ μ μλνμ§λ§ μ±κ³΅νμ§ λͺ»νμ΅λλ€. μ΄μ μΈμ€ν΄μ€λ₯Ό μλμΌλ‘ taskkill'ν κ²½μ° _even_ λ Έλλ₯Ό μ€νν λλ§λ€ _맀λ²_ "μ¬μ© μ€μΈ μ£Όμ" μ€λ₯κ° λ°μνμ΅λλ€. λλ κ·Έ μ΄μ λ₯Ό μμν μ μμ΅λλ€.
μμμ μν λλ²κΉ μ νΌνκ³ μ΄λ»κ² κ·Έλ¦¬κ³ μ μ€λ¨λλμ§ μ΄ν΄λ³΄λ κ²μ΄ κ°μ₯ μ’μ΅λλ€.
λν ν μ€νΈν κ²μ΄ μλ Macμ ν¨μ¬ μ΄μ λ²μ μ nodemonμμ λ°μν λ¬Έμ μ λν΄μλ μΈκΈνκ³ μμ΅λλ€. κ·Έλ€μ΄μ λ³΄λΌ μμλ μμ μ¬νμ΄μμ κ²½μ° μ λ¬Έμ λ₯Ό μ κΈ°, (μ½λ) 볡μ μΈλΆ μ¬νμ ν¬ν¨νκ³ μ΄μ©λ©΄ μ°Έμ‘° νκ³ : λλ λκ΅°κ°κ° κ·Έλ€μ΄ κ² _still_λ³΄κ³ λΉμ·ν λ¬Έμ κ°μλ κ²½μ°λ ν¬λ§μμμ΄ λ¬Έμ λ₯Ό μ κΈκ±°μΌ ν보 π
κ°μ₯ μ μ©ν λκΈ
Google μ§μμ μν μ루μ ...
λμκ² λ¬Έμ λ
concurrently
μ¬μ©μΌλ‘ μΈν΄ λ°μν©λλ€. λ΄κ° μ€μνμ§ μμΌλ©΄ λμμ λ«νκ³ nodemonμ΄ μμ μ΄ μλ£λ κ²μΌλ‘ κ°μ£Όν©λλ€.λμμ μ¬μ©νμ§ μλλΌλ nodemon μ’ λ£μ νλ‘μΈμ€ μ’ λ£μ μΆ©λλ‘ μΈν΄ κ³Όκ±°μ μ μ¬ν λ¬Έμ κ° λ§μ΄ λ°μνμ΅λλ€.
λ€μκ³Ό κ°μ΄ κ±°μ λͺ¨λ 무μλ―Έν ν¬νΈ κ΄λ ¨ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
λ³Έμ§μ μΌλ‘ μμ λ΄μ©μ "TCP ν¬νΈ 5000 λ° 3050μμ μ€ν μ€μΈ λͺ¨λ κ²μ μ’ λ£"ν©λλ€.
nodemonμ΄ μμλκΈ° μ μ μ€ν¬λ¦½νΈμ μ΄κ²μ μΆκ°ν μλ μμ΅λλ€:
λν μ΄κ²μ nodemon λͺ λ Ήμ μΆκ°ν΄μΌ ν©λλ€.
μ§μ°μ΄ μμΌλ©΄ 10λ² μ€ 2λ²μ ν¬νΈ μΆ©λμ΄ λ°μν©λλ€.
μ§μ°μ λν λͺ¨λ μλ‘μ΄ λ³κ²½ μ¬νμ μ¬μ€μ νκΈ° λλ¬Έμ nodemonμ΄ λ€μ μμνλ μ€νΈμ λ°©μ§ν©λλ€(μΆ©λμ μΌμΌν€λ λ λ€λ₯Έ κ²μ λ°©μ§).
λ€μ μμνκΈ° μ μ ν¬νΈλ₯Ό μ£½μ΄λ κΈ°λ₯μ΄ λ΄μ₯λ κ²μ΄λΌλ©΄(ν λ²μ μ¬λ¬ μ€ν¬λ¦½νΈλ₯Ό μ€νν μ μλ κΈ°λ₯κ³Ό ν¨κ») λ μ’μ κ²μ λλ€.
cc @λ λ―Έ