diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-04-26 15:51:52 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-04-26 15:51:52 +0200 |
commit | 7a46d3b4977bcd1e115324880a409e88032899a7 (patch) | |
tree | e2294e1054c5301a03f91ae7685ca3efcf92cc9b /lib/cli/serve.js | |
parent | 357aa92e31df8f4809ebb01438878ec3ace96ae6 (diff) | |
download | gitbook-7a46d3b4977bcd1e115324880a409e88032899a7.zip gitbook-7a46d3b4977bcd1e115324880a409e88032899a7.tar.gz gitbook-7a46d3b4977bcd1e115324880a409e88032899a7.tar.bz2 |
Add command "serve"
Diffstat (limited to 'lib/cli/serve.js')
-rw-r--r-- | lib/cli/serve.js | 80 |
1 files changed, 77 insertions, 3 deletions
diff --git a/lib/cli/serve.js b/lib/cli/serve.js index d97cfed..628f591 100644 --- a/lib/cli/serve.js +++ b/lib/cli/serve.js @@ -1,19 +1,93 @@ -var path = require('path'); +/* eslint-disable no-console */ -var options = require('./options'); -var getBook = require('./getBook'); +var tinylr = require('tiny-lr'); var Parse = require('../parse'); var Output = require('../output'); +var options = require('./options'); +var getBook = require('./getBook'); +var getOutputFolder = require('./getOutputFolder'); +var Server = require('./server'); +var watch = require('./watch'); + +var server, lrServer, lrPath; + +function generateBook(args, kwargs) { + var port = kwargs.port; + var outputFolder = getOutputFolder(args); + var book = getBook(args, kwargs); + var Generator = Output.getGenerator(kwargs.format); + + // Stop server if running + if (server.isRunning()) console.log('Stopping server'); + + return server.stop() + .then(function() { + return Parse.parseBook(book) + .then(function(resultBook) { + return Output.generate(Generator, resultBook, { + root: outputFolder + }); + }); + }) + .then(function() { + console.log(); + console.log('Starting server ...'); + return server.start(outputFolder, port); + }) + .then(function() { + console.log('Serving book on http://localhost:'+port); + + if (lrPath) { + // trigger livereload + lrServer.changed({ + body: { + files: [lrPath] + } + }); + } + }) + .then(function() { + if (!kwargs.watch) return; + + return watch(book.getRoot()) + .then(function(filepath) { + // set livereload path + lrPath = filepath; + console.log('Restart after change in file', filepath); + console.log(''); + return generateBook(args, kwargs); + }); + }); +} + module.exports = { name: 'serve [book] [output]', description: 'serve the book as a website for testing', options: [ + { + name: 'port', + description: 'Port for server to listen on', + defaults: 4000 + }, + { + name: 'lrport', + description: 'Port for livereload server to listen on', + defaults: 35729 + }, + { + name: 'watch', + description: 'Enable/disable file watcher', + defaults: true + }, options.log, options.format ], exec: function(args, kwargs) { + server = new Server(); + lrServer = tinylr({}); + return generateBook(args, kwargs); } }; |