静态、SPA、代理与 WebSocket —— 都由单个二进制提供。
servd 是一个自包含的开发、测试与轻量托管服务器 —— 可作为 http-server 的替代品,并原生支持反向代理、TLS 与自我监督的守护进程。
安装
npm install --global @qingyu31/servd $ servd --spa=./frontend --proxy=/api/=http://localhost:9000/api/ --ws=/ws=ws://localhost:9000/ws --port=8080servd 0.1.0 listening on 0.0.0.0:8080 (all IPv4 interfaces)Hosts: unrestricted spa / -> /app/frontend proxy /api -> http://localhost:9000/api/ proxy /ws -> ws://localhost:9000/ws▋为什么选择 servd
零配置
无需配置文件、无需必选参数:直接运行 servd 即托管当前目录,其余能力均为按需的挂载参数。
静态与 SPA
将一个或多个目录挂载到路径前缀,并支持基于内容协商的 SPA 回退到 index.html。
HTTP 代理
将挂载前缀转发到上游 URL 并重写路径。最长挂载优先,代理优先于同挂载点的文件。
WebSocket 代理
通过与静态站点、API 相同的端口隧道转发 ws:// 与 wss:// 上游。
HTTPS 与 WSS
基于 PEM 证书与密钥终结 TLS 1.2+。同一端口通过 HTTP/1.1 提供 HTTPS 与 WSS。
CORS 与 Host 过滤
允许通配符或显式来源(不含凭证),并可限制接受哪些 Host 请求头。
守护进程模式
以分离方式运行,监督进程使用指数退避重启崩溃的 worker。
零依赖
通过 npm 以各平台包分发的单一静态二进制,托管服务无需 Node 运行时。
与 http-server、nginx 的对比
| 能力 | http-server | nginx | servd |
|---|---|---|---|
| 零配置启动 | 是(单一根目录) | 否(需要配置文件) | 是(托管当前目录) |
| 配置文件与 reload | 仅参数 | nginx.conf + reload | 无配置文件,仅参数 |
| 多个 HTTP 代理挂载 | 否(仅 --proxy 回退) | 是(location 块) | 是(--proxy 可重复) |
| 代理路径重写 | 否 | 是(rewrite) | 是(mount=target) |
| WebSocket 代理 | 否 | 是(Upgrade 头) | 是(--ws) |
| SPA 回退 | 基础 | 是(try_files) | 是(内容协商) |
| CORS | 是 | 手动加头 | 是(--cors) |
| TLS / HTTPS | 是 | 是 | 是(TLS 1.2+,HTTP/1.1) |
| 带重启的后台守护进程 | 否 | 是(master/worker) | 是(--daemon) |
| 运行时与上手成本 | Node.js;低 | 独立服务器;高 | 无(单一静态二进制);低 |
使用场景
查看全部预览本地构建产物
把 servd 指向 dist/、build/ 或 _site/,一条命令预览生产构建 —— 无 Node 运行时,开箱即得正确的缓存与 gzip/brotli。
本地调试代理(SPA + API + WebSocket)
本地调试时把前端构建产物与后端放在同一个端口之后。servd 托管 SPA、把 /api 重写到你的服务器、并隧道转发 /ws —— 浏览器只看到一个源,无需任何 CORS 配置。
轻量级托管
把一个静态二进制指向某个目录并持续托管 —— 内部工具、演示、覆盖率报告或小型站点 —— 可选 TLS、Host 过滤与自我重启的守护进程。
来自博客
查看全部用 servd 替换 http-server
从 npm 的 http-server 迁移到 servd 的实操指南 —— 等价命令、变化之处,以及你的收获。
servd 发布
一个用于开发、测试与轻量托管的单一二进制静态/SPA/HTTP/WebSocket 服务器 —— 通过 npm 分发。
一个端口,一个源:用 servd 代理 WebSocket
servd 如何在单个端口上把 WebSocket 升级与 HTTP 一并隧道转发,以及这为何能把 CORS 从你的开发循环里移除。