Nodemon: Nodemon рдЕрдХреНрд╕рд░ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд╛рд▓реВ (рдЕрд▓рдЧ) рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдордИ 2017  ┬╖  100рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: remy/nodemon

рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Nodemon рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ server.close() рднреА рд╕рдлрд╛рдИ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдХреНрд╕рд░ "рдкреЛрд░реНрдЯ 3000 рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ" рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдбрдореЛрди рдкреБрд░рд╛рдиреЗ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдиреЛрдбрдореЛрди рдХреЛ рдорд╛рд░рдирд╛ рд╣реИ, killall node рдЪрд▓рд╛рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ рдиреЛрдбрдореЙрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдЙрдкрд╛рдп рд╣реИрдВ?

  • рдУрдПрд╕ рдПрдХреНрд╕ рдПрд▓ рдХреИрдкрд┐рдЯрд╛рди
  • рдиреЛрдб v7.10.0.
  • рдиреЛрдбрдореЙрди v1.11.0

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХрд╣реАрдВ рд╕реЗ рднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдореЗрд░реА рд▓рд┐рдкрд┐ рдХреА рдЖрдЦрд┐рд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реЛ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓реЗрдЧреА!

рдореИрдВ CTRL+C рдХреЗ рд╕рд╛рде iTerm рдореЗрдВ рдФрд░ OSX Sierra 10.12.5 рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдореИрдХ рдкрд░ рдЕрдкрдиреА рдиреЛрдбрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реВрдВред

process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); });

рд╕рднреА 100 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдореИрдВ рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдУрдПрд╕ рдПрдХреНрд╕ рдПрд▓ рдХреИрдкрд┐рдЯрд╛рди
рдиреЛрдб v6.9.1
рдиреЛрдбрдореЙрди v1.11.0

рд╡рд╣реА рдпрд╣рд╛рдБ, рдореБрдЭреЗ рдЕрдкрдиреЗ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рднреА рдПрдХ EADDRINUSE рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ

рдУрдПрд╕ рдПрдХреНрд╕ рд╕рд┐рдПрд░рд╛
рдиреЛрдб v6.10.3
рдиреЛрдбрдореЙрди v1.11.0

31960 ttys005    0:00.41 node /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/nodemon -e ts --verbose --exec ts-node  lib/server.ts
31962 ttys005    0:00.10 node /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/ts-node lib/server.ts
31963 ttys005    0:01.10 /Users/harman.goei/.nvm/versions/node/v7.10.0/bin/node /Users/harman.goei/.nvm/versions/node/v7.10.0/lib/node_modules/ts-node/d
ist/_bin.js lib/server.ts

рдиреЛрдбрдореЙрди 31962 рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 31963 рдЕрднреА рднреА рдмрдирд╛ рд╣реБрдЖ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ 31963 31962 рдХреА рдПрдХ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ)ред рдлрд┐рд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 31963 рдореЗрдВ рдЕрднреА рднреА рд╕рд░реНрд╡рд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдЕрджреНрдпрддрди:
рдЦреЛрдЬ рдХрд░рдиреЗ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ SIGUSR2 рдЪрд╛рдЗрд▓реНрдб рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред SIGHUP рдХреА рдЬрд░реВрд░рдд рдереАред

рдореБрдЭреЗ рднреА рдпрд╣реА рддрдХрд▓реАрдлрд╝ рд╣реИред рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдЕрднреА рддрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд╣реИ?

рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХрд╣реАрдВ рд╕реЗ рднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдореЗрд░реА рд▓рд┐рдкрд┐ рдХреА рдЖрдЦрд┐рд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реЛ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓реЗрдЧреА!

рдореИрдВ CTRL+C рдХреЗ рд╕рд╛рде iTerm рдореЗрдВ рдФрд░ OSX Sierra 10.12.5 рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдореИрдХ рдкрд░ рдЕрдкрдиреА рдиреЛрдбрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реВрдВред

process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); });

рд╡рд╣реА рдореБрджреНрджрд╛, рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдЗрд╕рдореЗрдВ рд╕реЗ CTRL+C рдХрд░ рджреВрдВ рдФрд░ npm start рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реВрдВред

$ npm start

> [email protected] start ter
> npm run build:live


> [email protected] build:live ter
> nodemon --exec ./node_modules/.bin/ts-node -- ./index.ts

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...
[nodemon] restarting due to changes...
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
[nodemon] restarting due to changes...
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...
NodeJS server started...
Error: listen EADDRINUSE :::3000
    at Object.exports._errnoException (util.js:1016:11)
    at exports._exceptionWithHostPort (util.js:1039:20)
    at Server.setupListenHandle [as _listen2] (net.js:1307:14)
    at listenInCluster (net.js:1355:12)
    at Server.listen (net.js:1455:7)
    at Application.listen (/ter/node_modules/koa/lib/application.js:64:19)
    at Object.<anonymous> (/er/index.ts:9:5)
    at Module._compile (module.js:569:30)
    at Module.m._compile (ter/node_modules/ts-node/src/index.ts:379:23)
    at Module._extensions..js (module.js:580:10)
[nodemon] app crashed - waiting for file changes before starting...
^C
$ npm start

> [email protected] start ter
> npm run build:live


> [email protected] build:live ter
> nodemon --exec ./node_modules/.bin/ts-node -- ./index.ts

[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `./node_modules/.bin/ts-node ./index.ts`
NodeJS server started...

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛, рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ?

[[16:13:36] [nodemon] restarting due to changes...
[16:13:36] [nodemon] starting `node test/phantomFlow/test/test.js --delay 2.5 --ignore test/`
Parallelising 1 test files on 1 processes.

Picking up job: flows\carepilotweb.test.js
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE :::9001
    at Object.exports._errnoException (util.js:1026:11)
    at exports._exceptionWithHostPort (util.js:1049:20)
    at Server._listen2 (net.js:1257:14)
    at listen (net.js:1293:10)
    at Server.listen (net.js:1389:5)
    at Function.app.listen (C:\workspace\deleteme_0420\carepilot-web\test\phantomFlow\node_modules\connect\lib\proto.js:232:24)
    at Object.<anonymous> (C:\workspace\deleteme_0420\carepilot-web\test\phantomFlow\test\test.js:46:4)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
[16:13:36] [nodemon] app crashed - waiting for file changes before starting...
](url)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдЬрдм рдореИрдВ рдЧрд▓реНрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

gulp.task('report-debug', /*['clean-build-app-dev', 'validate-devserver-scripts'],*/ function(){
    // start nodemon to load test.js
    plugins.nodemon({ script: 'server/server.js', ext: 'js', watch: ['server/'], args:['--ignore', 'test/'], env: { NODE_ENV: 'development' } })
        .on('start', function () {
            plugins.nodemon({ script: 'test/phantomFlow/test/test.js', watch: ['server/'], args:['debug', '--ignore', 'test/'], stdout: false })
            .on('readable', function() {
                this.stdout.on('data', function(chunk) {
                    if (/Completed /.test(chunk)) {
                        const { exec } = require('child_process');
                        exec('node test/phantomFlow/test/test.js report', ['--ignore', 'test/']);
                    }
                    process.stdout.write(chunk);
                });
                this.stderr.pipe(process.stderr);
            });
        });
});

рдпрд╣рд╛рдБ рдкрд░ рд╡рд╣реА рд╕рдЯреАрдХ рдореБрджреНрджрд╛ рд╣реЛрдирд╛ред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВрдиреЗ рдХрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рдж рдкрд╛рдИ рд╣реИ, рд╡рд╣ рд╣реИ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдУрдПрд╕ рд╕реНрдерд╛рдкрдирд╛ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рддрдп рдХреА рдЧрдИ рд╣реИред рдмреЗрд╢рдХ рдореИрдВ рд╣рд░ рдмрд╛рд░ рдХреНрд▓реАрди рдЗрдВрд╕реНрдЯрд╛рд▓ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдмрд╕ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рдпрд╣рд╛рдВ рд╡рд╣реАред рд╕рднреА рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд╛рд▓реВ рд░рдЦрдирд╛ (1.12.0)

рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди?

рдирд╣реАрдВ, рдореБрдЭреЗ рдлрд┐рд░ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рдиреЛрдбрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИред

рдХреЛрдИ рдЙрдкрд╛рдп?

рдореИрдВ ubuntu 16.04, nodemon 1.12.1 рдФрд░ рдиреЛрдб v8 рдкрд░ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдорд╛рд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рдЙрд╕реЗ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдореЗрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рднреЗрдЬреЗ рдЧрдП рд╕рд┐рдЧреНрдирд▓ ( SIGUSR2 ) рдиреЗ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирд╛рдпрд╛ред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рд┐рдЧреНрдирд▓ рдХреЛ SIGHUP рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред

рдореИрдВрдиреЗ nodemon.json рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ:

{
  "signal": "SIGHUP",
  "env": {
    "NODE_ENV": "development"
  },
  "ext": "ts",
  "exec": "ts-node --inspect ./lib/server.ts"
}

рдФрд░ рдореЗрд░реЗ package.json рдореЗрдВ, рдЪреВрдВрдХрд┐ рдореИрдВ npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдиреЛрдбрдореЙрди рдЪрд▓рд╛рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

"dev": "nodemon",

рд╕рдорд╕реНрдпрд╛ ts-node рд╣реА рд╣реИ: https://github.com/TypeStrong/ts-node/pull/458

рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдЕрдкрдиреЗ рдРрдк/рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреЛрд░реНрдЯ 3000 рдкрд░ рдкреАрдЖрдИрдбреА тАЛтАЛтАЛтАЛрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рдирд╛ рд╣реЛрдЧрд╛ред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рд╣реИ nodemon рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ child_process.spawn рдХреЗ рдмрдЬрд╛рдп child_process.fork рдмрдЪреНрдЪреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╣рддреНрдпрд╛ рдЙрд╕рдХреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рдирд╣реАрдВ рдорд╛рд░рддреА рд╣реИред

рдЗрд╕ рдХрд╛ рд╣рд▓ рд╣реИ рд╕рдВрд╢реЛрдзрд┐рдд nodemon рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП child_process.fork рдЬрдм рдиреЛрдб рдмрдЪреНрдЪреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдмрдирд╛рдиреЗ (рдФрд░ child_process.spawn рдЧреИрд░ рдиреЛрдб рдирд┐рд╖реНрдкрд╛рджрдирдпреЛрдЧреНрдп рд▓рд┐рдП), рдЗрд╕рд▓рд┐рдП рдЙрд╕ рдиреЛрдб рдХреЗ рд╕реБрдВрджрд░ (рдФрд░ рд╕реНрд╡рдд) рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдореГрддреНрдпреБ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рднрд╛рд╡реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

child_process.fork рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрдИрдкреАрд╕реА рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рднреА рдЬреБрдбрд╝рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ process.send рдФрд░ process.on рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ .

рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рд╕реАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ): https://github.com/remy/nodemon/pull/1134

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЛрдб рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЕрдЧрд░ рдореБрдЭреЗ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдХрд╛ рд╕рдордп рдорд┐рд▓ рдЬрд╛рдП рддреЛ рдореИрдВ рдХрд░реВрдВрдЧрд╛ред

рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд╕реБрдзрд╛рд░ рдЬреЛ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ:

// NOTE: this ONLY works when using nodemon as a `require` module.
// I don't have a solution for booting nodemon from the CLI. Sorry!

var nodemon = require('nodemon');

process

  // Handle normal exits
  .on('exit', (code) => {
    nodemon.emit('quit');
    process.exit(code);
  })

  // Handle CTRL+C
  .on('SIGINT', () => {
    nodemon.emit('quit');
    process.exit(0);
  });

tl;dr child_process.fork рд╕рдмрд╕реЗ рд╕рд╛рдл рд╕рдорд╛рдзрд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдореГрддреНрдпреБ рд╣реЛрдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд╛рдл рдХрд░ рджреЗрддрд╛ рд╣реИред nodemon рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП fork рдмрдЬрд╛рдп spawn (рдХреЗ рд▓рд┐рдП node рдирд┐рд╖реНрдкрд╛рджрдирдпреЛрдЧреНрдп рдХреЗрд╡рд▓)ред

рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рд╕рд╣реА рд╣реИ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рд╣реВрдк рдЬрдВрдкрд┐рдВрдЧ рд╕реЗ рдЧреБрдЬрд░рдирд╛ред рдЖрдИрдЖрдИрдЖрд░рд╕реА spawn рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЭреЗ рдХреБрдЫ рд▓рд┐рдВрдХ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкреЙрди рдиреЗ рдореБрдЭреЗ рджрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдХрд╛рдВрдЯрд╛ (рдПрдЯ рдЕрд▓) рдирд╣реАрдВ рдерд╛ред

рдПрдХ рдкреАрдЖрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдЬреЛ рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЖрд╣, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдкреАрдЖрд░ рдЪреВрдХ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдлреЛрд░реНрдХрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдареАрдХ рд╣реИ, рд╣рд╛рдБ, рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд╣рд╛, рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ node рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ, fork рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдЪреНрдЪреЗ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрдмрдХрд┐ spawn рдХреЗ рд▓рд┐рдП рд╣реИ рдЕрдиреНрдп рд╕рднреА рдЧреИрд░-рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВред

Child_process.fork() рд╡рд┐рдзрд┐ child_process.spawn() рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирдИ Node.js рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд╛рдЗрд▓реНрдб_рдкреНрд░реЛрд╕реЗрд╕.рд╕реНрдкреЙрди () рдХреА рддрд░рд╣, рдЪрд╛рдЗрд▓реНрдбрдкреНрд░реЛрд╕реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реМрдЯрд╛рдП рдЧрдП рдЪрд╛рдЗрд▓реНрдбрдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реЛрдЧрд╛ рдЬреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдФрд░ рдЖрдЧреЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП subprocess.send() рджреЗрдЦреЗрдВред
https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options

рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрд┐рд╕ .apply рдЙрдкрдпреЛрдЧ рдЖрдк spawn рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдРрд╕реА рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╣рдореЗрдВ stdin/out/err рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ silent: true рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдмрдЪреНрдЪреЗ рдХреЗ рдкреАрдЖрдИрдбреА тАЛтАЛтАЛтАЛрдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрдЯрдб/рдЖрдЙрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ ..?

рдпрджрд┐ рдЖрдк рдЖрд╢реНрд╡рд╕реНрдд рд╣реИрдВ рдХрд┐ spawn рдЖрдкрдХреЗ рд░реЗрдкреЛ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдЙрддреНрддрд░ рд╣реИ, рддреЛ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдкреИрджрд╛ рд╣реБрдП рдмрдЪреНрдЪреЗ рдХреЗ рдкреАрдЖрдИрдбреА тАЛтАЛтАЛтАЛрдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдЙрд╕ .on('exit') , .on('SIGINT') рдорд╛рд░ рджреЗрдВ, рдЖрджрд┐... рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ fork рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣рд╛рдБ рднреА рдпрд╣реА рдореБрджреНрджрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ рдЬрдм рдореИрдВ NodeJS 6.4.0 рд╕реЗ NodeJS 8.90 рдкрд░ рдЧрдпрд╛ рдерд╛ред

рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдкрд╣рд▓реЗ nodemon рдХреЛ CTRL+C рдХреЗ рд╕рд╛рде рд░реЛрдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдореБрдЭреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдм рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ [рд╡рд┐рдВрдбреЛрдЬ 10]

рдпрд╣рд╛рдВ рд╡рд╣реА рдореБрджреНрджрд╛ред

$ node -v
v8.9.2

$ nodemon -v
1.12.5

@heisian рдХрд╛ рдХрд╛рдо рдпрд╣рд╛рдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдк рд╕рднреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдореЗрдВ [email protected] . рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ

рд╕реБрд╣ рд╡реАрдЯ! рдорджрдж рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИред

@heisian рдХреБрдЫ рдмрд┐рдЯреНрд╕ рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ

рд╣рдореНрдо, рд╢рд╛рдпрдж рдореИрдВ рдЕрд╕реНрдкрд╖реНрдЯ рдерд╛ рдХрд┐ run.js рднреАрддрд░ рдмрдЪреНрдЪреЗ рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреИрд╕реЗ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ?

рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░реНрдХ рдХрд╛ рдЗрд░рд╛рджрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕реЗ forkArgs рдЪрд░ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА:

child = fork(options.execOptions.script, forkArgs, {
...
});

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреЛрдб рдХреЛ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлреЛрд░реНрдХ рдХрд░рддрд╛ рд╣реВрдВ:

child_process.fork('./', [
      '--out-dir', './dist',
      '--ignore', './coverage,./dist,./docs,./embed,node_modules,shared/cli,' +
      'shared/docker,bin/tools,admin/src,main/src,partner/src,*.swp,*.swo,' +
      'admin/build,main/build,partner/build,**/tests,shared/webpack,./stories',
      '--copy-files',
      // Presets/Plugins are defined in <project_root>/.babelrc
    ], {
      execPath: './node_modules/.bin/babel',
    });

рд╡рд╣ рд╕рдм рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 ./node_modules/.bin/babel --out-dir ./dist --ignore ./coverage,./dist,./docs,./embed,node_modules,shared/cli,shared/docker,bin/tools,admin/src,main/src,partner/src,*.swp,*.swo,admin/build,main/build,partner/build,**/tests,shared/webpack,./stories --copy-files

рд╣рд╛рдБ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ, .splice(1) рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ --inspect рдпрджрд┐ рдпрд╣ рд╕реАрдПрд▓рдЖрдИ рддрд░реНрдХреЛрдВ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ _рдерд┐рдВрдХ_ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрдЦреНрдп рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдиреЛрдбрдореЙрди.рдЬреЗрдПрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА) рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреАрдмрдЧрд░ рдЦреБрд▓рд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╣реИрдХ рдХрд┐рдпрд╛ рд╣реИ (рдЕрдкрдиреЗ рдкреАрдЖрд░ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦреЗрдВ), рдФрд░ рдпрд╣ рдирд╡реАрдирддрдо рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдмреБрд▓реЗрдЯрдкреНрд░реВрдл рд╣реИред

рд╣рдореНрдо рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ, --inspect рдХреЛ рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдзреНрд╡рдЬрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмрдЪреНрдЪреЗ рдХреЛ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

1.12.1 рд╕реЗ 1.12.7 рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЕрднреА рднреА рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ

Port xxxx is already in use
[nodemon] app crashed - waiting for file changes before starting...

рдЬрдм рдореИрдВ рдЗрд╕реЗ (CTRL + C) рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж Nodemon рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реВрдВред

(рд╡рд┐рдВрдбреЛрдЬрд╝ 10) рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд: рджрд┐рд▓: @remy рдХреЗ рд▓рд┐рдП !

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдВрдбреЛрдЬрд╝ (рдЧрд┐рдЯ рдмреИрд╢, рдЖрджрд┐) рдореЗрдВ рдЖрдк рдХреИрд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@рд░реЗрдореА рдЬрд╝рд░реВрд░, #1164

рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдиреЛрдбрдЬ рдиреЗрдЯ рд╕реЙрдХреЗрдЯ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдиреЛрдбрдореЙрди-рд╡реА: 1.14.2 рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ
рдиреЛрдб-рд╡реА: 9.4
ubuntu/xenial

рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЬрдирд╕рдВрдкрд░реНрдХ рдиреЗ рдЗрд╕реЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛ?

рдпрджрд┐ рдиреЛрдбрдореЙрди рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдиреЛрдбрдореЙрди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рд╕реЙрдХреЗрдЯ рдХреЛ рдЪрд╛рд▓реВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдиреЛрдбрдореЙрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ pkill node рд╣реЛрдЧрд╛ рдЕрдиреНрдпрдерд╛ рдореБрдЭреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдкреЛрд░реНрдЯ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рддреНрд░реБрдЯрд┐ред

рдиреЛрдЯ: рдореЗрд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛ рдиреЗрдЯ рд╕реЙрдХреЗрдЯ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдореИрдВрдиреЗ рдХрд┐рд▓ рдХреЛрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдЪрд╛рдирдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬреИрд╕реЗ cntrl-c (SIGUP) рдпрд╣ рд╕реЙрдХреЗрдЯ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред FYI рдХрд░реЗрдВ, рдореИрдВ рдСрди-рдбреЗрде рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдмреЗрдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди nodemon --require @std/esm рд░реВрдк рдореЗрдВ @std/esm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдореИрдВ рдкрд╣рд▓реЗ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдлреЛрд░реНрдХ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИрдВ рдФрд░ рдкреИрджрд╛ рдирд╣реАрдВ рд╣реБрдИ рд╣реИрдВред рдпрджрд┐, рдЖрдкрдХреЗ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

process.send('some message')
// Should not throw an error

...рдФрд░ рдЖрдкрдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдЖрдк рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

process.on('message', function(message) {
  process.stdout.write(message)
})
// Should output 'some message'

...рддреЛ рдЖрдкрдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ child_process.fork рд╕рд╛рде рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдЗрдирд╛рдпрдд рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ spawned рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрддрд┐ рдХреЛ рд╕реНрд╡рдпрдВ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ - рдпрд╛ рддреЛ SIGKILL process.on('exit') рдпрд╛ рджреЛрдиреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрдиред

рдореИрдВ рдЗрд╕реЗ рдиреЛрдбрдореЙрди рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рднреА рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛

рдореИрдХреЛрдЬрд╝ рд╣рд╛рдИ рд╕рд┐рдПрд░рд╛ v10.13.4 рдкрд░ рдиреЛрдбрдореЙрди 1.17.3, рдиреЛрдб 9.2.0 рдХреЗ рд╕рд╛рде рднреА рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддреЗ рд╣реБрдП, @johnnydimas рдКрдкрд░ рдПрдХ рд▓рд╛рдЗрдирд░ рд╕рдорд╛рдзрд╛рди рдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдм рддрдХ рддрдп рдХрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ Ubuntu 18.04 рдФрд░ 17.10 рдкрд░ рднреА рдорд┐рд▓рддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рднреА! рд╕рднреА рдкреИрдХреЗрдЬ рдЕрдк-рдЯреВ-рдбреЗрдЯред
macOS рд╣рд╛рдИ рд╕рд┐рдПрд░рд╛ v10.13.2 . рдкрд░

@lukebrewerton @MissAnichka @ danielo515 @cormickjbrowne @ajones @sinonkt @nodediggity
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЛрдбрдореЛрди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдмреЗрдмреЗрд▓-рдиреЛрдб рд╣реИ!
npm i kexec -D рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛

рд╡реНрдпрд╛рдЦреНрдпрд╛:
https://github.com/babel/babel/issues/1062#issuecomment -84526036

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдереЛрдбрд╝рд╛ рдЙрддреНрд╕рд╛рд╣реА рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦ рд░рд╣рд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдмреЗрдмреЗрд▓-рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ = рдбреА

рдореИрдВ рдмреЗрдмреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдмрд╕ рд╕рд╛рджрд╛ рдкреБрд░рд╛рдирд╛ рдиреЛрдб рдЬреЗрдПрд╕

рдЕрднреА рднреА рдЗрд╕реЗ рдиреЛрдбрдореЙрди 1.17.5 рдкрд░ рдиреЛрдб 9.5 рдХреЗ рд╕рд╛рде рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, node -r ts-node/register index.ts рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реИ

@ рдХрд╛рдорд╢рд╛рдХ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ рдФрд░ рдЕрдкрдиреЗ index.ts рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ

рдореИрдВ рдЕрднреА рднреА macOS 10.13.3 рдкрд░ рдиреЛрдбрдореЙрди 1.18.3 рдФрд░ рдиреЛрдб 8.11.4 рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

рд╡рд╣реА рдореБрджреНрджрд╛ .... Ubuntu 18.04 LTS рдкрд░ рдиреЛрдбрдореЙрди 1.18.3 рдФрд░ рдиреЛрдб 8.11.4ред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдФрд░ 2500ms рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рджреЗрд░реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ SIGHUP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдиреЛрдбрдореЙрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рд░реНрдЧ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ ..... рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреЛрдИ рдЦреБрд╢реА рдирд╣реАрдВ ....

рдпрджрд┐ рдЖрдк рд╡реЗрдмрд╕реНрдЯреЙрд░реНрдо рдЯрд░реНрдорд┐рдирд▓ рдкреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЛрдбрдореЙрди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдИрдбреАрдИ (рдпрд╛ рд╢рд╛рдпрдж рдЯрд░реНрдорд┐рдирд▓ рдкреИрдирд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ) рдХреЗ рдмрд╛рдж EADDRINUSE рд╣реИ, рддреЛ рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реВрдЪреА рдореЗрдВ рдХреЛрдИ рдЖрд╡рд╛рд░рд╛ рдиреЛрдбрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реЗрд╖ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореЗрд░реЗ рд╕рд╛рде Ubuntu 18.04 рдХреЛ рд╣реБрдЖред

рд╕рдВрдХреЗрдд @dchekanov рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ vscode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереАред рдореИрдВ рдордЬрд╝рдмреВрддреА рд╕реЗ EADDRINUSE рд╡рд┐рдлрд▓рддрд╛ рд╣рд░ рдмрд╛рд░ рдиреЛрдбрдореЙрди рдиреЗ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рдпрд╣ рджреЛ рдиреЛрдбрдореЛрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореЗрд░реА рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдиреЛрдбрдореЙрди -рд╡реА 1.18.4
рдиреЛрдб -v v8.11.1
macOS Mojave рд╕рдВрд╕реНрдХрд░рдг 10.14
VsCode рдЯрд░реНрдорд┐рдирд▓

рдореЗрд░реЗ рд╕рд╛рде рднреА рд╡рд╣реА рджрд┐рдХреНрдХрдд рд╣реИред рдЖрдк рдЗрд╕ рд░реЗрдкреЛ рдХреЛ рдХреНрд▓реЛрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/aecorredor/express-graphql-postgres-starter рдФрд░ рдЪрд▓рд╛рдПрдВ yarn рдФрд░ рдлрд┐рд░ yarn start , рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ, рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рддреНрд░реБрдЯрд┐ рджреЗрдЦреЗрдВ . рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЕрднреА nodemon --exec babel-node index.js . рдЪрд▓рд╛рддрд╛ рд╣реВрдВ

рд╡рд╣реА рдореБрджреНрджрд╛ред 1.18.6ред
рдЙрдмрдВрдЯреВ рдкрд░ рдбреЙрдХрд░ рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдиреЛрдб 10.11

рдпрд╣рд╛рдБ рд╡рд╣реА рдореБрджреНрджрд╛!

рдЗрд╕рдиреЗ рдореЗрд░реА рдорджрдж рдХреА
yarn add --dev kexec

рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рд╣реИ ....
рд╢рд╛рдпрдж рдбреЛрдХрд░ рдЙрдиреНрдирдпрди рдХрд╛ рдХрд╛рд░рдг...рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХреНрдпреЛрдВ...
рдПрдбреНрд░рд┐рдирдпреВрдЬ...

рд╣рд╛рдп @justintien ,

рдореИрдВ рдиреЛрдбрдореЙрди рдХреЗ рд╕рд╛рде рдХрдИ рдмрд╛рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдлрд┐рд░ рднреА рдореИрдВ pm2 рдкреИрдХреЗрдЬ (http://pm2.keymetrics.io/) рдХреЗ рд▓рд┐рдП рдмрджрд▓ рдЧрдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдмрд╕ рдЗрд╕реЗ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ: pm2 start src/server.ts --watch --no-daemon
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ ES6 рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░реАрдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рдкреЛрд╕реНрдЯрд┐рдиреНрдЯреЙрд▓ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
"рдкреЛрд╕реНрдЯрдЗрдВрд╕реНрдЯреЙрд▓": "$(рдпрд╛рд░реНрди рдмрд┐рди)/pm2 рдЗрдВрд╕реНрдЯрд╛рд▓ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ"

рдЙрдордореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ "signal": "SIGTERM", рдХреЛ nodemon.json рдЬреЛрдбрд╝рдирд╛ рдерд╛ред

рдореИрдВ рдпрд╛рд░реНрди, рдбреЙрдХрд░ рдФрд░ рдЕрд▓реНрдкрд╛рдЗрди 10 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@lukebrewerton @MissAnichka @ danielo515 @cormickjbrowne @ajones @sinonkt @nodediggity
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдиреЛрдбрдореЛрди рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдмреЗрдмреЗрд▓-рдиреЛрдб рд╣реИ!
npm i kexec -D рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛

рд╡реНрдпрд╛рдЦреНрдпрд╛:
рдмреЗрдмрд▓/рдмреЗрдмреЗрд▓#1062 (рдЯрд┐рдкреНрдкрдгреА)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдереЛрдбрд╝рд╛ рдЙрддреНрд╕рд╛рд╣реА рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦ рд░рд╣рд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдмреЗрдмреЗрд▓-рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ рд╣рд╛рд▓рд╛рдВрдХрд┐ = рдбреА

рдореБрдЭреЗ рдЕрднреА рднреА рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рд╕рднреА рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди kexec рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдХреЗ, рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ kexec рдкреИрдХреЗрдЬ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

npmi kexex рдиреЗ 1.18.6 . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛

рджреЛрд╕реНрддреЛрдВ, рдпрд╣ рдПрдХ рдмрдВрдж рдФрд░ рдЕрд╕рдорд░реНрдерд┐рдд рдореБрджреНрджрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдмрдЧ рд╣реИ рдЬреЛ рдЖрдк рдирд╡реАрдирддрдо рдиреЛрдбрдореЙрди рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдП рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдП рдХрд┐ рдХреИрд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА рдЗрд╕реА рдореБрджреНрджреЗ рдкрд░ рдпрд╣ рдХрд╣рд╛ рд╣реИред

рдЕрдиреНрдпрдерд╛ рдХреГрдкрдпрд╛ рдЬрд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВ рдмрдВрдж рдореБрджреНрджреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде 1.12.6 рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд░рд╣рд╛ рдерд╛: yarn global add nodemon@next рдФрд░ рдлрд┐рд░ рдЖрдк рд╕реВрдЪреА рдореЗрдВ 1.12.6 рд╕рдВрд╕реНрдХрд░рдг рдЪреБрдиреЗрдВрдЧреЗ рдпрд╛ рдЖрдк рдмрд╕ yarn global add [email protected] рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ @remy : https://github.com/remy/nodemon/issues/1025#issuecomment -351394591

рдбреЛрдХрд░: рдиреЛрдб: 10-рдЕрд▓реНрдкрд╛рдЗрди
рдиреЛрдб: v10.6.0
рдиреЛрдбрдореЙрди: v1.18.7

рдореБрдЭреЗ рдХрд╛рд░рдг рдорд┐рд▓рд╛:

PID   USER     TIME   COMMAND
    1 root       0:00 /bin/sh -c npm i npm run dev -- -L
   16 root       0:00 sh
   22 root       0:00 npm
   32 root       0:00 sh -c nodemon ./src --exec babel-node "-L"
   33 root       0:01 node /app/node_modules/.bin/nodemon ./src --exec babel-node -L
   46 root       0:00 sh -c babel-node ./src
   47 root       0:00 node /app/node_modules/.bin/babel-node ./src
   53 root       0:00 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src

# if watch change, restarting due to changes...
# after: it's didn't kill sub child -> 47 & 53
    1 root       0:00 /bin/sh -c npm i npm run dev -- -L
   16 root       0:00 sh
   22 root       0:00 npm
   32 root       0:00 sh -c nodemon ./src --exec babel-node "-L"
   33 root       0:15 node /app/node_modules/.bin/nodemon ./src --exec babel-node -L
   47 root       0:00 node /app/node_modules/.bin/babel-node ./src
   53 root       0:09 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src
   78 root       0:00 sh -c babel-node ./src
   79 root       0:00 node /app/node_modules/.bin/babel-node ./src
   85 root       0:01 /usr/local/bin/node /app/node_modules/babel-cli/lib/_babel-node ./src

рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ:

  • "рд╕рд┐рдЧреНрдирд▓": "SIGTERM", nodemon.json рдореЗрдВред
  • npm i -D kexc (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдмреЗрдмреЗрд▓-рдиреЛрдб рдкрд╣рд▓реЗ kexec рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдереНрд░реЛ рдПрд░рд░ рд╣реИ)
app_1    | /app/node_modules/babel-cli/lib/babel-node.js:70
app_1    |     if (err.code !== "MODULE_NOT_FOUND") throw err;
app_1    |                                          ^
app_1    |
app_1    | Error: Error loading shared library /app/node_modules/kexec/build/Release/kexec.node: Exec format error
app_1    |     at Object.Module._extensions..node (internal/modules/cjs/loader.js:718:18)
app_1    |     at Module.load (internal/modules/cjs/loader.js:599:32)
app_1    |     at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
app_1    |     at Function.Module._load (internal/modules/cjs/loader.js:530:3)
app_1    |     at Module.require (internal/modules/cjs/loader.js:637:17)
app_1    |     at require (internal/modules/cjs/helpers.js:20:18)
app_1    |     at Object.<anonymous> (/app/node_modules/kexec/index.js:1:80)
app_1    |     at Module._compile (internal/modules/cjs/loader.js:689:30)
app_1    |     at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
app_1    |     at Module.load (internal/modules/cjs/loader.js:599:32)

@рдореЛрд╣рдореНрдордж-рдмрджрд╛рдЙрдИ
рдЙрддреНрдкрд╛рджрди рдореЗрдВ, рдореИрдВрдиреЗ рдиреЛрдбрдореЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдпрд╣ рд╕рд┐рд░реНрдл рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рд╣реИ ...
рдореИрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред :рд╢рд░рдорд╛рдирд╛:

рдиреЛрдб@10.13.0 рдФрд░ [email protected] рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛,
рдЗрд╕рд▓рд┐рдП рдиреЛрдбрдореЛрди рдХреЛ 1.18.8 рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдЯреАрдПрд╕ рдФрд░ рдЕрдкреЛрд▓реЛ рд╕рд░реНрд╡рд░ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

@ Alienalien13 рдиреЗ рдЬреЛ рдХрд╣рд╛,

рд╕рдорд╛рдЪрд╛рд░!

рдореИрдВ 1.18.9 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!

рдорд╣рд╛рди!!

@рдореЛрд╣рдореНрдордж-рдмрджрд╛рдЙрдИ

рдзрдиреНрдпрд╡рд╛рдж рджреЛрд╕реНрдд ! рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдореИрдВрдиреЗ рдЬреЛ рдХрд┐рдпрд╛ рдЙрд╕реЗ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдореЗрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рднреЗрдЬреЗ рдЧрдП рд╕рд┐рдЧреНрдирд▓ ( SIGUSR2 ) рдиреЗ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирд╛рдпрд╛ред рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕рд┐рдЧреНрдирд▓ рдХреЛ SIGHUP рдмрджрд▓рдирд╛ рдкрдбрд╝рд╛ред

рдореИрдВрдиреЗ nodemon.json рдирд╛рдордХ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ:

{
  "signal": "SIGHUP",
  "env": {
    "NODE_ENV": "development"
  },
  "ext": "ts",
  "exec": "ts-node --inspect ./lib/server.ts"
}

рдФрд░ рдореЗрд░реЗ package.json рдореЗрдВ, рдЪреВрдВрдХрд┐ рдореИрдВ npm рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдиреЛрдбрдореЙрди рдЪрд▓рд╛рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

"dev": "nodemon",

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ "signal": "SIGHUP" рдЬреЛрдбрд╝рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред

@Mutmatt nodemon v1.18.10 рдореБрдЭреЗ "рдЕрдЬреНрдЮрд╛рдд рдпрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡рд┐рдХрд▓реНрдк: -- рдирд┐рд░реАрдХреНрд╖рдг" рдмрддрд╛рддрд╛ рд╣реИред

@bennyn рдЖрдк рдХреЛрдИ рднреА package.json рдЯрд╛рдЗрдк рдХрдорд╛рдВрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕реЗ nodemon.json

{
  "signal": "SIGHUP",
  "ext": "ts",
  "exec": "npm run serve",
  "watch": ["src"]
}

рд╕рдордЭрд╛! рддреЛ рдпрд╣ рдПрдХ рдЭрдВрдбрд╛ рд╣реИ рдЬрд┐рд╕реЗ ts-node рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдорд╛рдл рдХрд░рдирд╛ рдореЗрд░рд╛ рдмреБрд░рд╛ред рдореИрдВ

рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдореБрджреНрджрд╛
Error: listen EADDRINUSE
nodemon: 1.18.11
node: 10.14.1

рд╕рдм рдХреБрдЫ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ :(
рдЯреАрдПрд╕-рдиреЛрдб + рдиреЛрдбрдореЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдореИрдВ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЯрд░реНрдорд┐рдирд▓, рдЙрдмрдВрдЯреВ 18 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдПрдХ рддрд░реАрдХрд╛ рдерд╛ рдЯрд░реНрдорд┐рдирд▓ рдЫреЛрдбрд╝рдирд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдвреВрдВрдврдирд╛ рдФрд░ рдЗрд╕реЗ рдорд╛рд░рдирд╛
рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдмрд╛рд╣рд░ рдирдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рд╢реБрд░реВ рдХрд░реЗрдВ
рддрд╛рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛

рдпреВрдкреА

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдиреЛрдбрдореЙрди рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИред

рдореИрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд▓рд┐рдП dotenv рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ '.env' рдлрд╛рдЗрд▓ рдереАред

рд╡реЛ рдРрд╕рд╛ рдерд╛:
PORT=3000,

рдпрджрд┐ рдЖрдк json рд╕реЗ рдХреЙрдкреА рдкреЗрд╕реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдХреЙрдорд╛ рд╣рдЯрд╛рдирд╛ рди рднреВрд▓реЗрдВред

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛
npm cache clean -force

рд╡рд┐рдХрд▓реНрдк "autoAttachChildProcesses": true рдореЗрд░реЗ рд▓рд┐рдП рд╣рд▓ рд╣реЛ рдЧрдпрд╛

рд╡рд┐рдХрд▓реНрдк "autoAttachChildProcesses": рд╕рдЪ рдореЗрд░реЗ рд▓рд┐рдП рд╣рд▓ рд╣реЛ рдЧрдпрд╛

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ nodemon.json рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХрд╣рд╛рдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореБрдЭреЗ рдЕрднреА рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред рдЕрдЧрд░ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рддреЛ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдбреАрдмрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

"nodemon": "^1.19.1",
node: v10.16.2
npm: 6.9.0

рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА, рд╕рд╛рдл рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд╛рд▓рд╛ рд╣реИ?

рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ "рдиреЛрдб.рдПрдХреНрд╕рдИ рдиреЛрдб.рдЬреЗрдПрд╕: рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд░реЛрдХреЗрдВред

рдЕрдкрдиреА рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ, рдЬрд╣рд╛рдВ рдЖрдк рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЗрд╕реЗ рд░рдЦреЗрдВ:
process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); })

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдмрд╕ рдПрдлрд╡рд╛рдИрдЖрдИ рдЕрдЧрд░ рдХреЛрдИ рдЕрднреА рднреА рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рднреА рдЖрдЬрдорд╛рдПрдВ:
рдореИрдВ рдпрд╛рд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг yarn cache clean рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЬрд╛рджреВ рдХрд┐рдпрд╛ред
npm рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, npm cache clean рдЖрдЬрд╝рдорд╛рдПрдВред

рддреЛ рдЬрдм рдпрд╣ рдЪрд▓рддрд╛ рд╣реИ рддреЛ рдиреЛрдбрдореЙрди рдХреЛ рдорд╛рд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ ???

рдмрд╕ рдирд╡реАрдирддрдо рдиреЛрдбрдореЙрди рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдПрдирдкреАрдПрдо рдЕрдкрдЧреНрд░реЗрдб рдФрд░ рдЗрд╕рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдиреЛрдб 6 рд╕реЗ 10 рддрдХ рдЯрдХрд░рд╛ рдЧрдпрд╛:
"рдиреЛрдбреЗрдорди": "^ 1.19.2",
рдиреЛрдб: 10.16.0
рдПрдирдкреАрдПрдо: 6.9.0

@ doc82 рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджрд╛ рдмреЗрд╣рдж рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рд╣рд░ рдмрд╛рд░ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдПрдХ рд╣реА рдмрд╛рдд рд╣реЛрддреА рд╣реИред

рдЖрдк рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЙрдард╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ 10 рдореЗрдВ рд╕реЗ 9 рдмрд╛рд░ рдпрд╣ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдиреЛрдбрдореЙрди рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ "рд╣реИрдВрдЧрд┐рдВрдЧ рд╕рдмрдкреНрд░реЛрд╕реЗрд╕" рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛

[рдиреЛрдбрдореЛрди] рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреБрдирдГ рдЖрд░рдВрдн рд╣реЛ рд░рд╣рд╛ рд╣реИ...
[рдиреЛрдбрдореЛрди] node server.js
рдЗрд╡реЗрдВрдЯ.рдЬреЗрдПрд╕:183
рдлреЗрдВрдХ рдПрд░; // рд╣реИрдВрдбрд▓ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ 'рддреНрд░реБрдЯрд┐' рдШрдЯрдирд╛
^

рддреНрд░реБрдЯрд┐: EADDRINUSE рд╕реБрдиреЗрдВ ::: 3000
Object._errnoException рдкрд░ (util.js:1022:11)
_exceptionWithHostPort рдкрд░ (util.js:1044:20)
Server.setupListenHandle рдкрд░ [as _listen2] (net.js:1367:14)
рд╕реБрдиреЛрдЗрдирдХреНрд▓рд╕реНрдЯрд░ рдкрд░ (net.js:1408:12)
Server.listen рдкрд░ (net.js:1492:7)
рд╡рд╕реНрддреБ рдкрд░ред(/home/dg/junesis/server.js:8:8)
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдореЙрдбреНрдпреВрд▓.рдЬреЗрдПрд╕:652:30)
Object.Module._extensions..js рдкрд░ (module.js:663:10)
рдореЙрдбреНрдпреВрд▓.рд▓реЛрдб рдкрд░ (рдореЙрдбреНрдпреВрд▓.рдЬреЗрдПрд╕:565:32)
tryModuleLoad рдкрд░ (module.js:505:12)
Function.Module._load рдкрд░ (module.js:497:3)
Function.Module.runMain рдкрд░ (module.js:693:10)
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ (bootstrap_node.js:188:16)
рдмреВрдЯрд╕реНрдЯреНрд░реИрдк_рдиреЛрдб.рдЬреЗрдПрд╕:609:3 . рдкрд░
[рдиреЛрдбрдореЛрди] рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ - рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ ...
[рдиреЛрдбрдореЛрди] рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреБрдирдГ рдЖрд░рдВрдн рд╣реЛ рд░рд╣рд╛ рд╣реИ...
[рдиреЛрдбрдореЛрди] node server.js
рдкреЛрд░реНрдЯ 3000 рдкрд░ рд╕реБрди рд░рд╣рд╛ рд╣реВрдБ...
[рдиреЛрдбрдореЛрди] рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреБрдирдГ рдЖрд░рдВрдн рд╣реЛ рд░рд╣рд╛ рд╣реИ...
[рдиреЛрдбрдореЛрди] node server.js
рдЗрд╡реЗрдВрдЯ.рдЬреЗрдПрд╕:183
рдлреЗрдВрдХ рдПрд░; // рд╣реИрдВрдбрд▓ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ 'рддреНрд░реБрдЯрд┐' рдШрдЯрдирд╛
^

рддреНрд░реБрдЯрд┐: EADDRINUSE рд╕реБрдиреЗрдВ ::: 3000
Object._errnoException рдкрд░ (util.js:1022:11)
_exceptionWithHostPort рдкрд░ (util.js:1044:20)
Server.setupListenHandle рдкрд░ [as _listen2] (net.js:1367:14)
рд╕реБрдиреЛрдЗрдирдХреНрд▓рд╕реНрдЯрд░ рдкрд░ (net.js:1408:12)
Server.listen рдкрд░ (net.js:1492:7)
рд╡рд╕реНрддреБ рдкрд░ред(/home/dg/junesis/server.js:8:8)
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдореЙрдбреНрдпреВрд▓.рдЬреЗрдПрд╕:652:30)
Object.Module._extensions..js рдкрд░ (module.js:663:10)
рдореЙрдбреНрдпреВрд▓.рд▓реЛрдб рдкрд░ (рдореЙрдбреНрдпреВрд▓.рдЬреЗрдПрд╕:565:32)
tryModuleLoad рдкрд░ (module.js:505:12)
Function.Module._load рдкрд░ (module.js:497:3)
Function.Module.runMain рдкрд░ (module.js:693:10)
рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ (bootstrap_node.js:188:16)
рдмреВрдЯрд╕реНрдЯреНрд░реИрдк_рдиреЛрдб.рдЬреЗрдПрд╕:609:3 . рдкрд░
[рдиреЛрдбрдореЛрди] рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ - рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ ...
[рдиреЛрдбрдореЛрди] рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рдкреБрдирдГ рдЖрд░рдВрдн рд╣реЛ рд░рд╣рд╛ рд╣реИ...
[рдиреЛрдбрдореЛрди] node server.js
рдкреЛрд░реНрдЯ 3000 рдкрд░ рд╕реБрди рд░рд╣рд╛ рд╣реВрдБ...

рдЕрдЧрд░ рдЖрдкрдХреЛ рдРрд╕рд╛ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ:

рддреНрд░реБрдЯрд┐: рдореЙрдбреНрдпреВрд▓ '/home/dg/junesis/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
рдПрдХ рдЕрд▓рдЧ Node.js рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
NODE_MODULE_VERSION 57. Node.js рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
NODE_MODULE_VERSION 64. рдХреГрдкрдпрд╛ рдкреБрди: рд╕рдВрдХрд▓рди рдпрд╛ рдкреБрди: рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ
рдореЙрдбреНрдпреВрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, npm rebuild рдпрд╛ npm install )ред
Object.Module._extensions..node рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:807:18)
рдореЙрдбреНрдпреВрд▓.рд▓реЛрдб рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/рд╕реАрдЬреЗ/рд▓реЛрдбрд░.рдЬреЗрдПрд╕:653:32)
tryModuleLoad рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:593:12)
Function.Module._load рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:585:3)
рдореЙрдбреНрдпреВрд▓.require рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:692:17)
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/helpers.js:25:18)
рд╡рд╕реНрддреБ рдкрд░ред(/home/dg/junesis/node_modules/bcrypt/bcrypt.js:6:16)
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:778:30)
Object.Module._extensions..js рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:789:10)
рдореЙрдбреНрдпреВрд▓.рд▓реЛрдб рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/рд╕реАрдЬреЗ/рд▓реЛрдбрд░.рдЬреЗрдПрд╕:653:32)
tryModuleLoad рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:593:12)
Function.Module._load рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:585:3)
рдореЙрдбреНрдпреВрд▓.require рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:692:17)
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/helpers.js:25:18)
рд╡рд╕реНрддреБ рдкрд░ред(/home/dg/junesis/server/controller/userController.js:2:16)
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/cjs/loader.js:778:30)
[рдиреЛрдбрдореЛрди] рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рдЧрдпрд╛ - рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ ...

рдЖрдкрдХреЛ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдЖрд░рдПрдо-рдЖрд░рдПрдл рдиреЛрдб_рдореЙрдбреНрдпреВрд▓/рдмреАрдХреНрд░рд┐рдкреНрдЯ
рдПрдирдкреАрдПрдо рдЗрдВрд╕реНрдЯреЙрд▓

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реБрдЖ:
рдкреНрд░рдХреНрд░рд┐рдпрд╛
// рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдХрд╛рд╕ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВ
.on('рдирд┐рдХрд╛рд╕', (рдХреЛрдб) => {
nodemon.emit ('рдЫреЛрдбрд╝реЛ');
рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ (рдХреЛрдб);
})

// Handle CTRL+C
.on('SIGINT', () => {
    nodemon.emit('quit');
    process.exit(0);
});

https://github.com/remy/nodemon/issues/1025#issuecomment -345361918 рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ "рдиреЛрдб.рдПрдХреНрд╕рдИ рдиреЛрдб.рдЬреЗрдПрд╕: рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ" рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд░реЛрдХреЗрдВред

рдЕрдкрдиреА рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдиреАрдЪреЗ рдЬреЛрдбрд╝реЗрдВ, рдЬрд╣рд╛рдВ рдЖрдк рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЗрд╕реЗ рд░рдЦреЗрдВ:
process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); })

рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдпрд╣ рдорджрдж рдХреА! рдзрдиреНрдпрд╡рд╛рдж!

рдбреЗрдмрд┐рдпрди рдЖрдзрд╛рд░рд┐рдд рдбрд┐рд╕реНрдЯреНрд░реЛ рдкрд░ рдореЗрд░реА рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); }) рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛ рджреВрд░ рд╣реЛ рдЧрдИред

рдореИрдВ рдЗрд╕реА рдореБрджреНрджреЗ рдХреЛ рдорд╛рд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ 100% рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдХрд┐рд▓ рдХрдорд╛рдВрдб рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ рдореИрдХ/* рдирд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдореИрдВ рд╣реВрдВ, рдкреЛрд░реНрдЯ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЙрд╕реЗ рдорд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:

"scripts": {
    "start": "npm run kill & node ./node_modules/.bin/nodemon ./bin/www",
    "kill": "kill $(lsof -t -i:3000) | exit 0",
}

3000 рд╡рд╣ рдкреЛрд░реНрдЯ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдкреЛрд░реНрдЯ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рддреЛ | exit 0 рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рд╢рд╛рдВрдд рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯрд╛рд░реНрдЯ рдХрдорд╛рдВрдб рдЕрдм npm run kill & рдЬреЛ рдорд╛рд░рддрд╛ рд╣реИ рдФрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ node ./node_modules/.bin/nodemon ./bin/www рдХреЛ рдЖрдкрдХреЗ рдРрдк рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХрднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд▓реЗрдХрд┐рди рдЕрдм рдЕрдЪрд╛рдирдХ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреА рд╣реИред рдЙрдмрдВрдЯреВ 18.04 "nodemon": "^2.0.2" , рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг 13.7.0 ред

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХрднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд▓реЗрдХрд┐рди рдЕрдм рдЕрдЪрд╛рдирдХ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреА рд╣реИред рдЙрдмрдВрдЯреВ 18.04 "nodemon": "^2.0.2" , рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг 13.7.0 ред

рдпрд╣рд╛рдВ рджреЛрдиреЛрдВ рдЯреВрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд╕рдорд╛рди рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрд╕рдВрдЦреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реНрд░реЛрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд░реБрдХреЛ, рд░реБрдХреЛ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдиреЛрдбрдореЙрди рдЪрд▓ рд░рд╣рд╛ рд╣реИ! рдореИрдВрдиреЗ рдПрдХ рд╕рд░реНрд╡рд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреНрд╡реАрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рджреЗрдЦрд╛, рдФрд░ рдЕрдЪрд╛рдирдХ рдкрд┐рдб рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдореИрдВ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдиреЛрдбрдореЙрди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ рдПрдХ рдирдИ рд╣рд╛рдкреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред 5 рдореЗрдВ рд╕реЗ 4 рдмрд╛рд░, рдЬрдм рдиреЛрдбрдореЙрди рдкреБрдирдГ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ EADDRINUSE рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред

рд▓реЗрдХрд┐рди рдореИрдВ рдкреБрд░рд╛рдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рд╛рдкреА рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рдиреЛрдбрдореЙрди рдХреЗ рд╕рдорд╛рди рд╕рдВрд╕реНрдХрд░рдг ( 2.0.2 ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ ред рдореЗрд░реА рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдорд╛рди рд╣рд╛рдкреА рдФрд░ рдиреЛрдбрдореЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЦрд░реЛрдВрдЪ рд╕реЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп рдореИрдВ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВ рдХрд╛рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рдпрдВ рд╣рд╛рдкреА рдпрд╛ рдиреЛрдбрдореЛрди рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХрднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд▓реЗрдХрд┐рди рдЕрдм рдЕрдЪрд╛рдирдХ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреА рд╣реИред рдЙрдмрдВрдЯреВ 18.04 "nodemon": "^2.0.2" , рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг 13.7.0 ред

рдпрд╣рд╛рдВ рджреЛрдиреЛрдВ рдЯреВрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд╕рдорд╛рди рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрд╕рдВрдЦреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реНрд░реЛрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, @Ratstail91 рдХреЗ рд╕рд╛рде - рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирдорд╕реНрддреЗ,

рдореБрдЭреЗ рдпрд╣рд╛рдБ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдЬ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд░рд╣реА рд╣реИред
рдореИрдВ ts-рдиреЛрдб рдХреЗ рд╕рд╛рде рдиреЛрдбрдореЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛)

рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛:

  1. рдиреЛрдб_рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
  2. рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ 10 рд╕реЗ 12 рдФрд░ 13 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдФрд░ рдЕрд▓реНрдкрд╛рдЗрди рдЯреИрдЧ рднреАред
  3. рдиреЛрдбрдореЙрди 2.0.2 рд╕реЗ 1.19 . рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
  4. рдкреНрд░реВрди рдбреЙрдХрд░ рд╡реЙрд▓реНрдпреВрдо, рдиреЗрдЯрд╡рд░реНрдХ, рдХрдВрдЯреЗрдирд░, рдЗрдореЗрдЬ
  5. рдЦрд░реЛрдВрдЪ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВред
  6. рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдиреЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ 3000 рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬрд╝ рдХреЛ рдорд╛рд░реЗрдВ: lsof, pkill, рдХрд┐рд▓, рдХрд┐рд▓ ...
  7. рдкреЛрд░реНрдЯ рдХреЛ 3000 рд╕реЗ рдЕрдиреНрдп рдореЗрдВ рдмрджрд▓рдирд╛
  8. рд╣реЛрд╕реНрдЯ рдХреЛ 0.0.0.0 рд╕реЗ рдЕрдиреНрдп рдореЗрдВ рдмрджрд▓рдирд╛
  9. рдореЗрд░реА рдорд╢реАрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ (рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рд╕реНрдерд┐рддрд┐)

рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрд▓ рдиреЛрдбрдореЙрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдерд╛ ...
рдпрджрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ, рддреЛ рдореИрдВ рдЕрднреА рднреА рдпрд╣рд╛рдБ рд╣реВрдБред

рд╕рдВрджреЗрд╢ рддреНрд░реБрдЯрд┐ рд╣реИ =>

yume-api | Error: listen EADDRINUSE: address already in use "3000" yume-api | at Server.setupListenHandle [as _listen2] (net.js:1263:19) yume-api | at listenInCluster (net.js:1328:12) yume-api | at Server.listen (net.js:1426:5) yume-api | at Function.listen (/usr/src/yume-api/node_modules/express/lib/application.js:618:24) yume-api | at Object.<anonymous> (/usr/src/yume-api/src/server.ts:35:5) yume-api | at Module._compile (internal/modules/cjs/loader.js:778:30) yume-api | at Module.m._compile (/usr/src/yume-api/node_modules/ts-node/src/index.ts:814:23) yume-api | at Module._extensions..js (internal/modules/cjs/loader.js:789:10) yume-api | at Object.require.extensions.(anonymous function) [as .ts] (/usr/src/yume-api/node_modules/ts-node/src/index.ts:817:12) yume-api | at Module.load (internal/modules/cjs/loader.js:653:32) yume-api | at tryModuleLoad (internal/modules/cjs/loader.js:593:12) yume-api | at Function.Module._load (internal/modules/cjs/loader.js:585:3) yume-api | at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) yume-api | at main (/usr/src/yume-api/node_modules/ts-node/src/bin.ts:226:14) yume-api | at Object.<anonymous> (/usr/src/yume-api/node_modules/ts-node/src/bin.ts:485:3) yume-api | at Module._compile (internal/modules/cjs/loader.js:778:30) yume-api | at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) yume-api | at Module.load (internal/modules/cjs/loader.js:653:32) yume-api | at tryModuleLoad (internal/modules/cjs/loader.js:593:12) yume-api | at Function.Module._load (internal/modules/cjs/loader.js:585:3) yume-api | at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) yume-api | at startup (internal/bootstrap/node.js:283:19) yume-api | [nodemon] app crashed - waiting for file changes before starting...

рдФрд░ рд╡реИрд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЬреАрдм рд╕реЙрдХреЗрдЯ рдлрд╝рд╛рдЗрд▓ "3000" рд╣реИ рдЬреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ рдЗрд╕ рдкрд░ рдХреЛрдИ рд╕рдВрдХреЗрдд?

рдореБрдЭреЗ рдкрд╣рд▓реЗ рдХрднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реБрдИ рд▓реЗрдХрд┐рди рдЕрдм рдЕрдЪрд╛рдирдХ рд╕реЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рд▓рдЧреА рд╣реИред рдЙрдмрдВрдЯреВ 18.04 "nodemon": "^2.0.2" , рдиреЛрдб рд╕рдВрд╕реНрдХрд░рдг 13.7.0 ред

рдпрд╣рд╛рдВ рджреЛрдиреЛрдВ рдЯреВрд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдкрд░ рд╕рдорд╛рди рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдЕрд╕рдВрдЦреНрдп рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реНрд░реЛрдд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ node рд╕реЗ Docker Official Images рдкрд░ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЗрд╡рд▓ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ Mac OS рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди Windows 10 рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рдореБрдЭреЗ рднреА рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ 3/4 рдмрд╛рд░ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ 3 рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдПрдХ рдкреАрдЖрд░ рдорд░реНрдЬ рдерд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕реНрд░реЛрдд рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд╕рдорд╛рди рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рд╕реНрд░реЛрдд рдирд╣реАрдВ (рд╕рд╛рде рд╣реА рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ)ред

рдЗрди _new_ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВрдЧреЗред рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕