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:
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();
+ });
+ });
+ }
});