fix(vite): resolve dev & preview server promises on process exit (#14812)

This commit is contained in:
Dmitriy Stepanenko 2023-02-07 00:35:38 +02:00 committed by GitHub
parent 06fbb4ffb6
commit b35187c142
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 15 deletions

View File

@ -58,8 +58,11 @@ export default async function* viteDevServerExecutor(
}; };
} }
// This Promise intentionally never resolves, leaving the process running await new Promise<void>((resolve) => {
await new Promise(() => {}); process.once('SIGINT', () => resolve());
process.once('SIGTERM', () => resolve());
process.once('exit', () => resolve());
});
} }
async function runViteDevServer(server: ViteDevServer): Promise<void> { async function runViteDevServer(server: ViteDevServer): Promise<void> {
@ -68,12 +71,9 @@ async function runViteDevServer(server: ViteDevServer): Promise<void> {
const processOnExit = async () => { const processOnExit = async () => {
await server.close(); await server.close();
process.off('SIGINT', processOnExit);
process.off('SIGTERM', processOnExit);
process.off('exit', processOnExit);
}; };
process.on('SIGINT', processOnExit); process.once('SIGINT', processOnExit);
process.on('SIGTERM', processOnExit); process.once('SIGTERM', processOnExit);
process.on('exit', processOnExit); process.once('exit', processOnExit);
} }

View File

@ -44,14 +44,11 @@ export default async function* vitePreviewServerExecutor(
const processOnExit = async () => { const processOnExit = async () => {
await closeServer(server); await closeServer(server);
process.off('SIGINT', processOnExit);
process.off('SIGTERM', processOnExit);
process.off('exit', processOnExit);
}; };
process.on('SIGINT', processOnExit); process.once('SIGINT', processOnExit);
process.on('SIGTERM', processOnExit); process.once('SIGTERM', processOnExit);
process.on('exit', processOnExit); process.once('exit', processOnExit);
// Launch the build target. // Launch the build target.
const target = parseTargetString(options.buildTarget, context.projectGraph); const target = parseTargetString(options.buildTarget, context.projectGraph);
@ -89,7 +86,11 @@ export default async function* vitePreviewServerExecutor(
} }
} }
await new Promise(() => {}); await new Promise<void>((resolve) => {
process.once('SIGINT', () => resolve());
process.once('SIGTERM', () => resolve());
process.once('exit', () => resolve());
});
} }
function closeServer(server?: PreviewServer): Promise<void> { function closeServer(server?: PreviewServer): Promise<void> {