You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Vite在浏览器标签关闭时自动停止服务器?

如何让Vite在无客户端连接时自动停止服务器?

核心结论

Vite没有原生配置支持"无客户端连接时自动退出",无法仅通过vite.config.mjs的内置配置实现,但可以通过自定义Vite插件配合可选的Python脚本优化来达成需求。


你的场景回顾

你在C:\Users\harry\workspace\test的Three.js项目中已完成以下配置:

  • 安装依赖:npm install --save three、npm install --save-dev vite
  • 配置vite.config.mjs实现自动打开浏览器
  • 通过Blender集成编辑器的Python脚本启动Vite,但脚本会阻塞UI,且需手动终止服务器

解决方案

方案1:自定义Vite插件监听客户端连接

在vite.config.mjs中添加自定义插件,监听服务器的连接状态,当所有客户端断开后延迟退出进程:

import { defineConfig } from 'vite';

export default defineConfig({
  server: {
    open: true // 保持原有自动开浏览器配置
  },
  plugins: [
    {
      name: 'auto-exit-on-disconnect',
      configureServer(server) {
        let activeConnections = 0;

        // 统计新建立的连接
        server.httpServer.on('connection', () => {
          activeConnections++;
        });

        // 监听连接关闭事件
        server.httpServer.on('close', () => {
          activeConnections--;
          // 延迟3秒检查,避免浏览器刷新时短暂断开导致误退出
          setTimeout(() => {
            if (activeConnections === 0) {
              process.exit(0); // 主动退出Vite进程
            }
          }, 3000);
        });
      }
    }
  ]
});
  • 延迟时间可根据需求调整(比如2000ms),平衡误触发和退出及时性
  • 该插件会在所有浏览器标签关闭、无活跃连接时自动终止Vite

方案2:优化Python脚本解决UI阻塞问题

原脚本用subprocess.run会阻塞Blender UI,改用subprocess.Popen启动非阻塞进程,并添加状态监听:

import subprocess
import os
import bpy

directory = r'C:\Users\harry\workspace\test'
command = 'npx vite'

# 启动非阻塞Vite进程
vite_process = subprocess.Popen(command, shell=True, cwd=directory)

# 注册Blender定时器,每秒检查一次Vite状态(不阻塞UI)
def check_vite_process():
    if vite_process.poll() is not None:
        print("Vite服务器已自动停止")
        return None  # 进程结束后停止定时器
    return 1.0  # 每隔1秒检查一次

bpy.app.timers.register(check_vite_process)
  • 此脚本启动Vite后不会阻塞Blender UI
  • 当Vite通过自定义插件自动退出时,定时器会感知并打印提示

注意事项

  • 必须通过自定义插件实现Vite的自动退出逻辑,Vite本身没有提供相关内置配置项
  • 如果不需要Blender定时器,也可以在独立Python脚本中用循环监听进程状态,或捕获键盘中断信号来手动终止Vite

内容的提问来源于stack exchange,提问作者Harry McKenzie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:42:42