diff --git a/src/node/serve/serve.ts b/src/node/serve/serve.ts index fe84e965aea2..63a2aeddad34 100644 --- a/src/node/serve/serve.ts +++ b/src/node/serve/serve.ts @@ -3,6 +3,18 @@ import compression from 'compression' import { resolveConfig } from '../config' import polka from 'polka' +function trimChar(str: string, char: string) { + while (str.charAt(0) === char) { + str = str.substring(1) + } + + while (str.charAt(str.length - 1) === char) { + str = str.substring(0, str.length - 1) + } + + return str +} + export interface ServeOptions { root?: string port?: number @@ -11,6 +23,7 @@ export interface ServeOptions { export async function serve(options: ServeOptions = {}) { const port = options.port !== undefined ? options.port : 5000 const site = await resolveConfig(options.root, 'serve', 'production') + const base = trimChar(site?.site?.base ?? "", "/") const compress = compression() const serve = sirv(site.outDir, { @@ -27,10 +40,19 @@ export async function serve(options: ServeOptions = {}) { } }) - polka() - .use(compress, serve) - .listen(port, (err: any) => { - if (err) throw err - console.log(`Built site served at http://localhost:${port}/\n`) - }) + if (base) { + polka() + .use(base, compress, serve) + .listen(port, (err: any) => { + if (err) throw err + console.log(`Built site served at http://localhost:${port}/${base}/\n`) + }) + } else { + polka() + .use(compress, serve) + .listen(port, (err: any) => { + if (err) throw err + console.log(`Built site served at http://localhost:${port}/\n`) + }) + } }