diff --git a/packages/vite/src/node/plugins/reporter.ts b/packages/vite/src/node/plugins/reporter.ts index 40b256468a1ef0..798c559c1108cf 100644 --- a/packages/vite/src/node/plugins/reporter.ts +++ b/packages/vite/src/node/plugins/reporter.ts @@ -32,6 +32,7 @@ export function buildReporterPlugin(config: ResolvedConfig): Plugin { let transformedCount = 0 let chunkCount = 0 let compressedCount = 0 + let startTime = Date.now() async function getCompressedSize( code: string | Uint8Array, @@ -84,6 +85,10 @@ export function buildReporterPlugin(config: ResolvedConfig): Plugin { return null }, + options() { + startTime = Date.now() + }, + buildEnd() { if (shouldLogInfo) { if (tty) { @@ -242,6 +247,16 @@ export function buildReporterPlugin(config: ResolvedConfig): Plugin { ) } }, + + closeBundle() { + if (shouldLogInfo && !config.build.watch) { + config.logger.info( + `${colors.green(`✓`)} built in ${displayTime( + Date.now() - startTime, + )}`, + ) + } + }, } } @@ -276,3 +291,23 @@ function displaySize(bytes: number) { minimumFractionDigits: 2, })} kB` } + +function displayTime(time: number) { + // display: {X}ms + if (time < 1000) { + return `${time}ms` + } + + time = time / 1000 + + // display: {X}s + if (time < 60) { + return `${time.toFixed(2)}s` + } + + const mins = parseInt((time / 60).toString()) + const seconds = time % 60 + + // display: {X}m {Y}s + return `${mins}m${seconds < 1 ? '' : ` ${seconds.toFixed(0)}s`}` +}