From a93ea31acb63f7ee728f5c5736bbecc18c64464d Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 27 Nov 2018 21:56:37 -0500 Subject: [PATCH 1/2] Added fallback CLI option --- bin/reload | 3 ++- lib/reload-server.js | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bin/reload b/bin/reload index 0671246..fb34dc4 100755 --- a/bin/reload +++ b/bin/reload @@ -14,6 +14,7 @@ program.version(require('../package.json').version) .option('-e, --exts [extensions]', 'Extensions separated by commas or pipes. Defaults to html,js,css.', 'html|js|css') .option('-p, --port [port]', 'The port to bind to. Can be set with PORT env variable as well. Defaults to 8080', '8080') .option('-s, --start-page [start-page]', 'Specify a start page. Defaults to index.html', 'index.html') + .option('-f, --fallback [fallback]', 'Fallback to start page when route is not found.') .option('-v, --verbose [verbose]', 'Turning on logging on the server and client side. Defaults to false', false) .parse(process.argv) @@ -29,7 +30,7 @@ if (typeof program.watchDir === 'undefined') { program.watchDir = program.dir } -var args = ['-e', program.exts, '-w', program.watchDir, '-q', '--', serverFile, program.port, program.dir, !!program.browser, program.hostname, runFile, program.startPage, program.verbose] +var args = ['-e', program.exts, '-w', program.watchDir, '-q', '--', serverFile, program.port, program.dir, !!program.browser, program.hostname, runFile, program.startPage, program.fallback, program.verbose] supervisor.run(args) console.log('\nReload web server:') diff --git a/lib/reload-server.js b/lib/reload-server.js index 2876eaf..9a2a8e9 100644 --- a/lib/reload-server.js +++ b/lib/reload-server.js @@ -15,7 +15,8 @@ var openBrowser = (argv._[2] === 'true') var hostname = argv._[3] var runFile = argv._[4] var startPage = argv._[5] -var verbose = (argv._[6] === 'true') +var fallback = (argv._[6] === 'true') +var verbose = (argv._[7] === 'true') var reloadOpts = { port: port, @@ -33,9 +34,11 @@ var server = http.createServer(function (req, res) { var pathname = url.pathname.replace(/(\/)(.*)/, '$2') // Strip leading `/` so we can find files on file system var fileEnding = pathname.split('.')[1] + var noFileExt = pathname.indexOf('.') === -1 + var shouldFallback = fallback && noFileExt - if (fileEnding === 'html' || pathname === '/' || pathname === '') { // Server side inject reload code to html files - if (pathname === '/' || pathname === '') { + if (fileEnding === 'html' || pathname === '/' || pathname === '' || shouldFallback) { // Server side inject reload code to html files + if (pathname === '/' || pathname === '' || shouldFallback) { pathname = dir + '/' + startPage } else { pathname = dir + '/' + pathname From c15f18eb31707b8de73b3a1cea4211d699fd02d5 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 2 Dec 2018 13:36:29 -0500 Subject: [PATCH 2/2] Add fallback to HTML files --- bin/reload | 2 +- lib/reload-server.js | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/bin/reload b/bin/reload index fb34dc4..c05b684 100755 --- a/bin/reload +++ b/bin/reload @@ -14,7 +14,7 @@ program.version(require('../package.json').version) .option('-e, --exts [extensions]', 'Extensions separated by commas or pipes. Defaults to html,js,css.', 'html|js|css') .option('-p, --port [port]', 'The port to bind to. Can be set with PORT env variable as well. Defaults to 8080', '8080') .option('-s, --start-page [start-page]', 'Specify a start page. Defaults to index.html', 'index.html') - .option('-f, --fallback [fallback]', 'Fallback to start page when route is not found.') + .option('-f, --fallback [fallback]', 'Fallback to the start page when route is not found') .option('-v, --verbose [verbose]', 'Turning on logging on the server and client side. Defaults to false', false) .parse(process.argv) diff --git a/lib/reload-server.js b/lib/reload-server.js index 9a2a8e9..19903a1 100644 --- a/lib/reload-server.js +++ b/lib/reload-server.js @@ -34,12 +34,17 @@ var server = http.createServer(function (req, res) { var pathname = url.pathname.replace(/(\/)(.*)/, '$2') // Strip leading `/` so we can find files on file system var fileEnding = pathname.split('.')[1] - var noFileExt = pathname.indexOf('.') === -1 - var shouldFallback = fallback && noFileExt + var noFileEnding = fileEnding === undefined - if (fileEnding === 'html' || pathname === '/' || pathname === '' || shouldFallback) { // Server side inject reload code to html files - if (pathname === '/' || pathname === '' || shouldFallback) { + if (fileEnding === 'html' || pathname === '/' || pathname === '' || noFileEnding) { // Server side inject reload code to html files + if (pathname === '/' || pathname === '') { pathname = dir + '/' + startPage + } else if (noFileEnding) { + if (fs.existsSync(dir + '/' + pathname + '.html')) { + pathname = dir + '/' + pathname + '.html' + } else if (fallback) { + pathname = dir + '/' + startPage + } } else { pathname = dir + '/' + pathname }