рдореИрдВ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдПрдХ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Nodemon рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ server.close()
рднреА рд╕рдлрд╛рдИ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдХреНрд╕рд░ "рдкреЛрд░реНрдЯ 3000 рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ" рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдбрдореЛрди рдкреБрд░рд╛рдиреЗ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдиреЛрдбрдореЛрди рдХреЛ рдорд╛рд░рдирд╛ рд╣реИ, killall node
рдЪрд▓рд╛рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ рдиреЛрдбрдореЙрди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдХреЛрдИ рдЙрдкрд╛рдп рд╣реИрдВ?
рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдореИрдВ рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред
рдУрдПрд╕ рдПрдХреНрд╕ рдПрд▓ рдХреИрдкрд┐рдЯрд╛рди
рдиреЛрдб 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
рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ:
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)
рд╡рд╕реНрддреБ рдкрд░ред
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдореЙрдбреНрдпреВрд▓.рдЬреЗрдПрд╕: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)
рд╡рд╕реНрддреБ рдкрд░ред
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдореЙрдбреНрдпреВрд▓.рдЬреЗрдПрд╕: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)
рд╡рд╕реНрддреБ рдкрд░ред
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/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)
рд╡рд╕реНрддреБ рдкрд░ред
рдореЙрдбреНрдпреВрд▓._рдХрдВрдкрд╛рдЗрд▓ рдкрд░ (рдЖрдВрддрд░рд┐рдХ/рдореЙрдбреНрдпреВрд▓/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-рдиреЛрдб рдХреЗ рд╕рд╛рде рдиреЛрдбрдореЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛)
рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛:
рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрд▓ рдиреЛрдбрдореЙрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдерд╛ ...
рдпрджрд┐ рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИ, рддреЛ рдореИрдВ рдЕрднреА рднреА рдпрд╣рд╛рдБ рд╣реВрдБред
рд╕рдВрджреЗрд╢ рддреНрд░реБрдЯрд┐ рд╣реИ =>
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_ рдореБрджреНрджреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдирд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВрдЧреЗред рдзрдиреНрдпрд╡рд╛рджред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХрд╣реАрдВ рд╕реЗ рднреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдпрд╣ рдореЗрд░реА рд▓рд┐рдкрд┐ рдХреА рдЖрдЦрд┐рд░реА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реЛ, рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рд╣рд╛рдпрддрд╛ рдорд┐рд▓реЗрдЧреА!
рдореИрдВ CTRL+C рдХреЗ рд╕рд╛рде iTerm рдореЗрдВ рдФрд░ OSX Sierra 10.12.5 рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдореИрдХ рдкрд░ рдЕрдкрдиреА рдиреЛрдбрдореЙрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реВрдВред
process.on('SIGINT', () => { console.log("Bye bye!"); process.exit(); });