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(() => {});
await new Promise<void>((resolve) => {
process.once('SIGINT', () => resolve());
process.once('SIGTERM', () => resolve());
process.once('exit', () => resolve());
});
}
async function runViteDevServer(server: ViteDevServer): Promise<void> {
@ -68,12 +71,9 @@ async function runViteDevServer(server: ViteDevServer): Promise<void> {
const processOnExit = async () => {
await server.close();
process.off('SIGINT', processOnExit);
process.off('SIGTERM', processOnExit);
process.off('exit', processOnExit);
};
process.on('SIGINT', processOnExit);
process.on('SIGTERM', processOnExit);
process.on('exit', processOnExit);
process.once('SIGINT', processOnExit);
process.once('SIGTERM', processOnExit);
process.once('exit', processOnExit);
}

View File

@ -44,14 +44,11 @@ export default async function* vitePreviewServerExecutor(
const processOnExit = async () => {
await closeServer(server);
process.off('SIGINT', processOnExit);
process.off('SIGTERM', processOnExit);
process.off('exit', processOnExit);
};
process.on('SIGINT', processOnExit);
process.on('SIGTERM', processOnExit);
process.on('exit', processOnExit);
process.once('SIGINT', processOnExit);
process.once('SIGTERM', processOnExit);
process.once('exit', processOnExit);
// Launch the build target.
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> {