坑所属项目 ↗2026-10-03

Astro Preview 后台进程运行中自动退出(ERR_CONNECTION_REFUSED)与重启验证

用 Start-Process 后台启动的 astro preview 服务在运行几分钟后进程退出,浏览器/curl 报 ERR_CONNECTION_REFUSED(服务此前正常)。解法:重启前先确认端口无监听(Get-NetTCPConnection),用 Start-Process 重新拉起并轮询 HTTP 200 就绪后再继续浏览器验证,避免误判为构建产物缺失。

  • Astro
  • Preview
  • 进程退出
  • 重启验证

现象

Start-Process cmd /c "npm run preview > preview.log 2>&1" 后台拉起 astro preview(HTTP 200 已验证),几分钟后再次访问 http://localhost:4321/projects 报 ERR_CONNECTION_REFUSED;Get-NetTCPConnection -State Listen 确认 4321 无监听,进程已退出。

误判风险

  • 服务退出的瞬间,浏览器页面上看到的是”无法访问此网站 / localhost 拒绝了我们的连接请求”,容易误判为 build 产物缺失 / 路由 404 / 代码问题,从而浪费轮次排查 dist。
  • 先查端口监听与 preview 日志(preview*.log 尾部),确认是服务进程没了而非内容问题。

解法

  1. Get-NetTCPConnection -LocalPort 4321 -State Listen → 无监听 = 服务已退出。
  2. 重新 Start-Process -FilePath cmd.exe -ArgumentList '/c npm run preview > preview-ex.log 2>&1' -WindowStyle Hidden -PassThru 记录 PID。
  3. 轮询就绪:循环 Invoke-WebRequest http://localhost:4321/ -TimeoutSec 4,直到 HTTP 200(约 2-10 秒)。
  4. 浏览器侧若停在 chrome-error 页,先 bu.navigate 目标 URL 重试,必要时 bu.resync() 再导航。

备注

  • 同一仓库已存在 pitfall-astro-preview-ipv6(端口迁移 + IPv6 监听),本坑聚焦”进程存活周期”与”重启验证”,两者是不同故障面。
  • astro preview 是静态服务 dist,重建 dist 后无需重启 preview 即可读到新文件(先验证 200 再浏览器操作)。