* Launches a server that reloads when the update function is called * @param {String} defaultPreview the default content for when the sever loads * @return {Object} { server, port, update }
(directory, port = 3000)
| 82 | * @return {Object} { server, port, update } |
| 83 | */ |
| 84 | function startDevServer (directory, port = 3000) { |
| 85 | let url |
| 86 | const app = express() |
| 87 | const { reload } = reloadServer(app) |
| 88 | let preview = '' |
| 89 | |
| 90 | app.get('/', (req, res) => res.send(preview)) |
| 91 | app.use(express.static(directory)) |
| 92 | |
| 93 | function update ({ html, errors, metadata }) { |
| 94 | let status = errors.length ? chalk.red('failed') : chalk.green('success') |
| 95 | preview = errors.length |
| 96 | ? buildErrorPage(errors) |
| 97 | : html.replace('</body>', '<script src="/reload/reload.js"></script></body>') |
| 98 | |
| 99 | renderCLI({ url, status, time: metadata.time, size: metadata.size }) |
| 100 | reload() |
| 101 | } |
| 102 | |
| 103 | return new Promise((resolve, reject) => { |
| 104 | getPort({ port }).then((availablePort) => { |
| 105 | url = `http://localhost:${availablePort}` |
| 106 | |
| 107 | app.listen(availablePort, () => resolve({ update, url, app })) |
| 108 | }) |
| 109 | |
| 110 | process.on('uncaughtException', reject) |
| 111 | }) |
| 112 | } |