|
|
|
@ -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`)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|