From 9ed8f2310d7b552bbdc06819da4c9f1b8548f2fe Mon Sep 17 00:00:00 2001 From: CHOYSEN Date: Wed, 10 Feb 2021 20:35:53 +0800 Subject: [PATCH] feat: support open browser in preview --- packages/vite/src/node/cli.ts | 13 ++++++++++--- packages/vite/src/node/serve.ts | 12 +++++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/cli.ts b/packages/vite/src/node/cli.ts index a263b53e707384..3ca5815f551995 100644 --- a/packages/vite/src/node/cli.ts +++ b/packages/vite/src/node/cli.ts @@ -66,7 +66,7 @@ cli .option('--host ', `[string] specify hostname`) .option('--port ', `[number] specify port`) .option('--https', `[boolean] use TLS + HTTP/2`) - .option('--open [browser]', `[boolean | string] open browser on startup`) + .option('--open [path]', `[boolean | string] open browser on startup`) .option('--cors', `[boolean] enable CORS`) .option('--strictPort', `[boolean] exit if specified port is already in use`) .option('-m, --mode ', `[string] set env mode`) @@ -186,15 +186,22 @@ cli cli .command('preview [root]') .option('--port ', `[number] specify port`) + .option('--open [path]', `[boolean | string] open browser on startup`) .action( - async (root: string, options: { port?: number } & GlobalCLIOptions) => { + async ( + root: string, + options: { port?: number; open?: boolean | string } & GlobalCLIOptions + ) => { try { const config = await resolveConfig( { root, base: options.base, configFile: options.config, - logLevel: options.logLevel + logLevel: options.logLevel, + server: { + open: options.open + } }, 'serve', 'development' diff --git a/packages/vite/src/node/serve.ts b/packages/vite/src/node/serve.ts index e267e48445096c..637854fcf2a612 100644 --- a/packages/vite/src/node/serve.ts +++ b/packages/vite/src/node/serve.ts @@ -7,6 +7,7 @@ import compression from 'compression' import { ResolvedConfig } from '.' import { Connect } from 'types/connect' import { resolveHttpServer } from './server/http' +import { openBrowser } from './server/openBrowser' export async function serve(config: ResolvedConfig, port = 5000) { const app = connect() as Connect.Server @@ -27,11 +28,11 @@ export async function serve(config: ResolvedConfig, port = 5000) { const options = config.server || {} const hostname = options.host || 'localhost' const protocol = options.https ? 'https' : 'http' - const info = config.logger.info + const logger = config.logger const base = config.base server.listen(port, () => { - info(`\n Build preview server running at:\n`) + logger.info(`\n Build preview server running at:\n`) const interfaces = os.networkInterfaces() Object.keys(interfaces).forEach((key) => (interfaces[key] || []) @@ -46,8 +47,13 @@ export async function serve(config: ResolvedConfig, port = 5000) { }) .forEach(({ type, host }) => { const url = `${protocol}://${host}:${chalk.bold(port)}${base}` - info(` > ${type} ${chalk.cyan(url)}`) + logger.info(` > ${type} ${chalk.cyan(url)}`) }) ) + + if (options.open) { + const path = typeof options.open === 'string' ? options.open : base + openBrowser(`${protocol}://${hostname}:${port}${path}`, true, logger) + } }) }