Nodemon: 였λ₯˜: EADDRINUSE λ“£κΈ°

에 λ§Œλ“  2018λ…„ 04μ›” 16일  Β·  44μ½”λ©˜νŠΈ  Β·  좜처: remy/nodemon

  • nodemon -v : 1.17.3
  • node -v : 8.10.0
  • 운영 체제/단말 ν™˜κ²½: MacOS 10.13.4
  • μ‹€ν–‰ν•œ λͺ…λ Ή: nodemon app.js

μ˜ˆμƒλ˜λŠ” 행동

λ™μΌν•œ http μ„œλ²„(호슀트 및 μ„œλ²„)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ³€κ²½ 사항이 μžˆλŠ” 경우 앱을 λ‹€μ‹œ μ‹œμž‘ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ‹€μ œ 행동

앱을 λ‹€μ‹œ μ‹œμž‘ν•˜μ§€λ§Œ EADDRINUSEλΌλŠ” 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

μž¬ν˜„ 단계

  1. μž‘μ€ ExpressJS 앱을 λ§Œλ“­λ‹ˆλ‹€. μ΅œμ†Œ 2개의 파일: app.js 및 dummy.js
  2. app.js κ°€ dummy.js μš”κ΅¬ν•˜λ„λ‘ ν•˜μ‹­μ‹œμ˜€.
  3. 호슀트(예: 127.0.0.1) 및 포트(예: 4000) μˆ˜μ‹ 
  4. nodemon app.js
  5. dummy.js μˆ˜μ • 및 μ €μž₯
can't replicate

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

Google 직원을 μœ„ν•œ μ†”λ£¨μ…˜...

λ‚˜μ—κ²Œ λ¬Έμ œλŠ” 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 @레미

λͺ¨λ“  44 λŒ“κΈ€

λ³΅μ œν•  수 μ—†μŒ:

1316

// 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 및 기타 μ€‘μš”:

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λŠ” 데 μ–΄λ–€ 것을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

  1. μ‹€
  2. npm
  3. λ‘˜ λ‹€(λ…Έλ“œ 직접 λ˜λŠ” nodemon 직접)

@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 ν–ˆμŠ΅λ‹ˆλ‹€.

Google 직원을 μœ„ν•œ μ†”λ£¨μ…˜...

λ‚˜μ—κ²Œ λ¬Έμ œλŠ” 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_보고 λΉ„μŠ·ν•œ λ¬Έμ œκ°€μžˆλŠ” κ²½μš°λŠ” ν¬λ§μ—μ„œμ΄ 문제λ₯Ό μž κΈ€κ±°μ•Ό 홍보 πŸ‘

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰