diff --git a/v3/UNRELEASED_CHANGELOG.md b/v3/UNRELEASED_CHANGELOG.md index b680790f1..faa3653bf 100644 --- a/v3/UNRELEASED_CHANGELOG.md +++ b/v3/UNRELEASED_CHANGELOG.md @@ -24,6 +24,7 @@ After processing, the content will be moved to the main changelog and this file ## Fixed +- Fix Vite server not being cleaned up when build fails (#4403) ## Deprecated diff --git a/v3/internal/commands/watcher.go b/v3/internal/commands/watcher.go index 6cdd6dc3a..13f83ad61 100644 --- a/v3/internal/commands/watcher.go +++ b/v3/internal/commands/watcher.go @@ -35,17 +35,31 @@ func Watcher(options *WatcherOptions) error { if err != nil { return err } - signalHandler := signal.NewSignalHandler(func() { + + // Setup cleanup function that stops the engine + cleanup := func() { + watcherEngine.Stop() + } + defer cleanup() + + // Signal handler needs to notify when to stop + signalCleanup := func() { + cleanup() stopChan <- struct{}{} - }) + } + + signalHandler := signal.NewSignalHandler(signalCleanup) signalHandler.ExitMessage = func(sig os.Signal) string { return "" } signalHandler.Start() + + // Start the engine err = watcherEngine.Start() if err != nil { return err } + <-stopChan return nil }