UNPKG

vite

Version:

Native-ESM powered web dev build tool

70 lines (60 loc) 2.04 kB
import path from 'path' import sirv from 'sirv' import chalk from 'chalk' import connect from 'connect' import compression from 'compression' import { ResolvedConfig } from '.' import { Connect } from 'types/connect' import { resolveHttpsConfig, resolveHttpServer } from './server/http' import { openBrowser } from './server/openBrowser' import corsMiddleware from 'cors' import { proxyMiddleware } from './server/middlewares/proxy' import { printServerUrls } from './logger' import { resolveHostname } from './utils' export async function preview( config: ResolvedConfig, serverOptions: { host?: string; port?: number; https?: boolean } ): Promise<void> { const app = connect() as Connect.Server const httpServer = await resolveHttpServer( config.server, app, serverOptions.https === false ? undefined : await resolveHttpsConfig(config) ) // cors const { cors } = config.server if (cors !== false) { app.use(corsMiddleware(typeof cors === 'boolean' ? {} : cors)) } // proxy if (config.server.proxy) { app.use(proxyMiddleware(httpServer, config)) } app.use(compression()) const distDir = path.resolve(config.root, config.build.outDir) app.use( config.base, sirv(distDir, { etag: true, dev: !config.isProduction, single: true }) ) const options = config.server const hostname = resolveHostname(serverOptions.host ?? options.host) const port = serverOptions.port ?? 5000 const protocol = options.https ? 'https' : 'http' const logger = config.logger const base = config.base httpServer.listen(port, hostname.host, () => { logger.info( chalk.cyan(`\n vite v${require('vite/package.json').version}`) + chalk.green(` build preview server running at:\n`) ) printServerUrls(hostname, protocol, port, base, logger.info) if (options.open) { const path = typeof options.open === 'string' ? options.open : base openBrowser(`${protocol}://${hostname.name}:${port}${path}`, true, logger) } }) }