diff --git a/packages/vite/src/runtime/vite-node.mjs b/packages/vite/src/runtime/vite-node.mjs index 57601e1b6c..10ebd1a1dd 100644 --- a/packages/vite/src/runtime/vite-node.mjs +++ b/packages/vite/src/runtime/vite-node.mjs @@ -1,5 +1,7 @@ +import { performance } from 'node:perf_hooks' import { ViteNodeRunner } from 'vite-node/client' import { $fetch } from 'ohmyfetch' +import consola from 'consola' import { getViteNodeOptions } from './vite-node-shared.mjs' const viteNodeOptions = getViteNodeOptions() @@ -25,12 +27,21 @@ export default async (ssrContext) => { const invalidates = await $fetch('/invalidates', { baseURL: viteNodeOptions.baseURL }) + const updates = new Set() for (const key of invalidates) { - runner.moduleCache.delete(key) + if (runner.moduleCache.delete(key)) { + updates.add(key) + } } // Execute SSR bundle on demand + const start = performance.now() render = render || (await runner.executeFile(viteNodeOptions.entryPath)).default + if (updates.size) { + const time = Math.round((performance.now() - start) * 1000) / 1000 + consola.success(`Vite server hmr ${updates.size} files`, time ? `in ${time}ms` : '') + } + const result = await render(ssrContext) return result }