From f23932e0a4ca2215bc635c1d226f584fe9406068 Mon Sep 17 00:00:00 2001 From: Yakov Khalinsky Date: Wed, 27 Jan 2016 22:43:10 +1100 Subject: [PATCH] Shiny new file watcher with --watch argument --- drakov | 5 ++++- lib/arguments/arguments.js | 3 +++ lib/watcher.js | 31 +++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 lib/watcher.js diff --git a/drakov b/drakov index 151e79a..bd02d2f 100755 --- a/drakov +++ b/drakov @@ -3,7 +3,10 @@ process.title = 'drakov'; var drakov = require('./lib/drakov'); +var watcher = require('./lib/watcher'); var args = require('./lib/arguments'); var argv = args.getArgv(); -drakov.run(argv); +drakov.run(argv, function() { + watcher(argv); +}); diff --git a/lib/arguments/arguments.js b/lib/arguments/arguments.js index 3134828..bcc6fbb 100644 --- a/lib/arguments/arguments.js +++ b/lib/arguments/arguments.js @@ -51,6 +51,9 @@ module.exports = { description: 'List all available endpoints under `/drakov`. If value of argument is a module name, it will be required and called to create a middleware function', alias: 'D', default: false + }, + watch: { + description: 'Reload Drakov when change detected in list of source files' } }; diff --git a/lib/watcher.js b/lib/watcher.js new file mode 100644 index 0000000..5cf4d1a --- /dev/null +++ b/lib/watcher.js @@ -0,0 +1,31 @@ +var chokidar = require('chokidar'); +require('colors'); + +var drakov = require('./drakov'); + +// Save these for replay later +var CACHED_ARGV = []; + +var RESTART_COUNT = 0; + +var changeHandler = function(filePath) { + ++RESTART_COUNT; + console.log('[CHANGE]'.white, filePath.green, ('Restarting ' + RESTART_COUNT).blue); + drakov.stop(function(){ + drakov.run(CACHED_ARGV); + }); +}; + +module.exports = function(argv) { + if (!argv.watch) { + return; + } + + console.log(' FILE SPY '.grey.inverse + ' ACTIVATE '.green.inverse); + + CACHED_ARGV = argv; + var sourceFiles = argv.sourceFiles; + + var watcher = chokidar.watch(sourceFiles); + watcher.on('change', changeHandler); +}; diff --git a/package.json b/package.json index 0574287..3f8ea14 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "license": "MIT", "dependencies": { "async": "^1.4.2", + "chokidar": "^1.4.2", "colors": "^1.1.0", "express": "^4.12.3", "glob": "^5.0.15",