From 7ba1c3cfa2b713adf16c3773b080982742dab75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Wed, 9 Nov 2022 04:08:41 +0100 Subject: [PATCH 1/2] feat(cli): build --profile --- packages/vite/src/node/cli.ts | 25 +++++++++++++++++++++++++ packages/vite/src/node/server/index.ts | 21 --------------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/packages/vite/src/node/cli.ts b/packages/vite/src/node/cli.ts index 9249b0b182c5a5..1bb471fe5c91fa 100644 --- a/packages/vite/src/node/cli.ts +++ b/packages/vite/src/node/cli.ts @@ -1,3 +1,5 @@ +import path from 'node:path' +import fs from 'node:fs' import { performance } from 'node:perf_hooks' import { cac } from 'cac' import colors from 'picocolors' @@ -28,6 +30,27 @@ interface GlobalCLIOptions { force?: boolean } +export const stopProfiler = (log: (message: string) => void): void => { + // @ts-ignore + const profileSession = global.__vite_profile_session + if (profileSession) { + profileSession.post('Profiler.stop', (err: any, { profile }: any) => { + // Write profile to disk, upload, etc. + if (!err) { + const outPath = path.resolve('./vite-profile.cpuprofile') + fs.writeFileSync(outPath, JSON.stringify(profile)) + log( + colors.yellow( + `CPU profile written to ${colors.white(colors.dim(outPath))}` + ) + ) + } else { + throw err + } + }) + } +} + const filterDuplicateOptions = (options: T) => { for (const [key, value] of Object.entries(options)) { if (Array.isArray(value)) { @@ -125,6 +148,7 @@ cli ) server.printUrls() + stopProfiler((message) => server.config.logger.info(` ${message}`)) } catch (e) { createLogger(options.logLevel).error( colors.red(`error when starting dev server:\n${e.stack}`), @@ -194,6 +218,7 @@ cli ) process.exit(1) } + stopProfiler((message) => createLogger(options.logLevel).info(message)) }) // optimize diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 7ea1d846183bb5..f84637b30b3b0e 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -1,4 +1,3 @@ -import fs from 'node:fs' import path from 'node:path' import type * as net from 'node:net' import type * as http from 'node:http' @@ -650,7 +649,6 @@ async function startServer( const hostname = await resolveHostname(options.host) const protocol = options.https ? 'https' : 'http' - const info = server.config.logger.info const serverPort = await httpServerStart(httpServer, { port, @@ -659,25 +657,6 @@ async function startServer( logger: server.config.logger }) - // @ts-ignore - const profileSession = global.__vite_profile_session - if (profileSession) { - profileSession.post('Profiler.stop', (err: any, { profile }: any) => { - // Write profile to disk, upload, etc. - if (!err) { - const outPath = path.resolve('./vite-profile.cpuprofile') - fs.writeFileSync(outPath, JSON.stringify(profile)) - info( - colors.yellow( - ` CPU profile written to ${colors.white(colors.dim(outPath))}\n` - ) - ) - } else { - throw err - } - }) - } - if (options.open && !isRestart) { const path = typeof options.open === 'string' ? options.open : server.config.base From d13e2008fb072df8447fd45c363d31f24cab26b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20Barr=C3=A9?= Date: Thu, 10 Nov 2022 02:34:44 +0100 Subject: [PATCH 2/2] fix: use finally --- packages/vite/src/node/cli.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/node/cli.ts b/packages/vite/src/node/cli.ts index 1bb471fe5c91fa..8a3ece51a08a66 100644 --- a/packages/vite/src/node/cli.ts +++ b/packages/vite/src/node/cli.ts @@ -150,10 +150,11 @@ cli server.printUrls() stopProfiler((message) => server.config.logger.info(` ${message}`)) } catch (e) { - createLogger(options.logLevel).error( - colors.red(`error when starting dev server:\n${e.stack}`), - { error: e } - ) + const logger = createLogger(options.logLevel) + logger.error(colors.red(`error when starting dev server:\n${e.stack}`), { + error: e + }) + stopProfiler(logger.info) process.exit(1) } }) @@ -217,8 +218,9 @@ cli { error: e } ) process.exit(1) + } finally { + stopProfiler((message) => createLogger(options.logLevel).info(message)) } - stopProfiler((message) => createLogger(options.logLevel).info(message)) }) // optimize @@ -301,6 +303,8 @@ cli { error: e } ) process.exit(1) + } finally { + stopProfiler((message) => createLogger(options.logLevel).info(message)) } } )