ff-stream-web

git clone git://archive.git.mtrnord.blog/MTRNord/ff-stream-web.git
Log | Files | Refs | README | LICENSE

commit 8c1dc607c409d149c86899cf8b9c4380cdcf5fa0
parent 73b5e5eb65d7d58d791d84afd6708e87500a3a67
Author: Konstantin Tarkus <hello@tarkus.me>
Date:   Sat, 12 Sep 2015 00:55:06 +0300

Automatically restart Node.js server when server-side code is modified

Closes #237

Diffstat:
Msrc/server.js | 3+--
Mtools/serve.js | 38++++++++++++++++++++++++++++----------
2 files changed, 29 insertions(+), 12 deletions(-)

diff --git a/src/server.js b/src/server.js @@ -55,9 +55,8 @@ server.get('*', async (req, res, next) => { // ----------------------------------------------------------------------------- server.listen(server.get('port'), () => { + console.log('The server is running at http://localhost:' + server.get('port')); if (process.send) { process.send('online'); - } else { - console.log('The server is running at http://localhost:' + server.get('port')); } }); diff --git a/tools/serve.js b/tools/serve.js @@ -9,20 +9,38 @@ import path from 'path'; import cp from 'child_process'; +import watch from './lib/watch'; /** * Launches Node.js/Express web server in a separate (forked) process. */ export default () => new Promise((resolve, reject) => { console.log('serve'); - const server = cp.fork(path.join(__dirname, '../build/server.js'), { - env: Object.assign({NODE_ENV: 'development'}, process.env) - }); - server.once('message', message => { - if (message.match(/^online$/)) { - resolve(); - } - }); - server.once('error', err => reject(error)); - process.on('exit', () => server.kill('SIGTERM')); + + function start() { + const server = cp.fork(path.join(__dirname, '../build/server.js'), { + env: Object.assign({ NODE_ENV: 'development' }, process.env), + silent: false + }); + + server.once('message', message => { + if (message.match(/^online$/)) { + resolve(); + } + }); + server.once('error', err => reject(err)); + process.on('exit', () => server.kill('SIGTERM')); + return server; + } + + let server = start(); + + if (global.WATCH) { + watch('build/server.js').then(watcher => { + watcher.on('changed', () => { + server.kill('SIGTERM'); + server = start(); + }); + }); + } });