diff --git a/packages/vite/src/node/optimizer/registerMissing.ts b/packages/vite/src/node/optimizer/registerMissing.ts index d28f750e571c1d..16db330942158e 100644 --- a/packages/vite/src/node/optimizer/registerMissing.ts +++ b/packages/vite/src/node/optimizer/registerMissing.ts @@ -11,6 +11,8 @@ export function createMissingImpoterRegisterFn(server: ViteDevServer) { let currentImporters = new Set() let handle: NodeJS.Timeout + let pendingResolve: (() => void) | null = null + async function rerun() { const newDeps = currentMissing currentMissing = {} @@ -61,6 +63,9 @@ export function createMissingImpoterRegisterFn(server: ViteDevServer) { chalk.red(`error while updating dependencies:\n${e.stack}`), { timestamp: true } ) + } finally { + pendingResolve && pendingResolve() + server._pendingReload = pendingResolve = null } logger.info(chalk.greenBright(`✨ dependencies updated.`), { @@ -78,6 +83,9 @@ export function createMissingImpoterRegisterFn(server: ViteDevServer) { if (importer) currentImporters.add(importer) if (handle) clearTimeout(handle) handle = setTimeout(rerun, debounceMs) + server._pendingReload = new Promise((r) => { + pendingResolve = r + }) } } } diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 0dae25f5f1cdc0..da95bad14516ff 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -246,6 +246,10 @@ export interface ViteDevServer { _registerMissingImport: | ((id: string, resolved: string, importer?: string) => void) | null + /** + * @internal + */ + _pendingReload: Promise | null } export async function createServer( @@ -318,7 +322,8 @@ export async function createServer( _optimizeDepsMetadata: null, _ssrExternals: null, _globImporters: {}, - _registerMissingImport: null + _registerMissingImport: null, + _pendingReload: null } process.once('SIGTERM', async () => {