UNPKG

@sssx/dev-server

Version:

Development server for SSSX

49 lines 1.84 kB
import path from 'path'; import open from 'open'; import express from 'express'; import * as dotenv from 'dotenv'; import Logger from '@sssx/logger'; import { fs, Builder } from 'sssx'; import { config, OUTDIR, PREFIX } from '@sssx/config'; import chokidar from 'chokidar'; import chalk from 'chalk'; dotenv.config({ path: '.env.local' }); export const startDevServer = async (routes = []) => { const PORT = process.env.PORT || 3000; const URL = `http://localhost:${PORT}/`; Logger.log(`Starting development server on ${URL}`); Logger.log(`from ${OUTDIR}`); if (!fs.existsSync(OUTDIR)) { routes = ['*']; // render all } // watch changes const builder = new Builder(); await builder.setup(); await builder.renderPool({ routes }); await builder.finalize(); const app = express(); const prefix = config.basePath.length === 0 ? '/' : config.basePath; const watcher = chokidar.watch(path.resolve(process.cwd(), config.sourceRoot), { ignoreInitial: true, ignored: [OUTDIR, PREFIX] }); watcher.on('all', async (eventName, path) => { Logger.clear(); Logger.log(chalk.gray('dev:watch'), chalk.green(eventName), path); // rebuilding whole site again, optimise later to rebuild only certain pieces const builder = new Builder(); await builder.setup(); await builder.renderPool({ routes }); await builder.finalize(); open(URL); }); app.use(async (req, res, next) => { Logger.log(chalk.gray('dev:browser'), req.path); if (!req.path.startsWith(`/${config.appDir}/`)) await builder.renderPool({ routes, paths: [req.path] }); next(); }); app.use(prefix, express.static(OUTDIR)); app.listen(PORT, () => open(URL)); }; //# sourceMappingURL=index.js.map