listhen
优雅的 HTTP 监听器
优雅的 HTTP 监听器!
功能特性
✅ 支持 HMR、静态文件、WebSockets 和 TypeScript 的开发服务器,由 unjs/jiti 提供支持
✅ 可与 Node.js、express 和 unjs/h3 无缝配合使用
✅ 使用 unjs/uqr 显示公共 URL 的二维码
✅ 使用 unjs/untun 将本地服务器隧道化到全球
✅ 使用 unjs/get-port-please 分配端口或回退到更优选择
✅ 使用 http-shutdown 优雅关闭服务器
✅ 零配置 WebSockets,支持 unjs/crossws
✅ 将 URL 复制到剪贴板
✅ 支持 HTTPS 和自签名证书
✅ 在浏览器中打开 URL
✅ 检测测试和生产环境以自动调整行为
✅ 在退出信号时关闭

快速使用 (CLI)
您可以使用 listhen
CLI 在 localhost 中运行您的应用程序,并支持 TypeScript 和监听模式
创建 index.ts
export default (req, res) => {
res.end("Hello World!");
};
或使用 unjs/h3
import { createApp, eventHandler } from "h3";
export const app = createApp();
app.use(
"/",
eventHandler(() => "Hello world!"),
);
或使用 npx 调用 listhen
命令
npx listhen -w ./index.ts
使用方法 (API)
安装包
# pnpm
pnpm i listhen
# npm
npm i listhen
# yarn
yarn add listhen
导入到您的 Node.js 项目
// CommonJS
const { listen, listenAndWatch } = require("listhen");
// ESM
import { listen, listenAndWatch } from "listhen";
const handler = (req, res) => {
res.end("Hi!")
}
// listener: { url, getURL, server, close, ... }
const listener = await listen(handler, options?)
选项
端口
- 默认值:
process.env.PORT
或 3000 或记忆化的随机端口 (参见 get-port-please)
要监听的端口。
主机名
- 默认值:
process.env.HOST || '0.0.0.0'
默认监听主机名。
https
- 类型:布尔值 | 对象
- 默认值:
false
在启用 SSL 的 HTTPS 上监听。
自签名证书
通过设置 https: true
,listhen 将使用自动生成的自签名证书。
您可以将 https 设置为一个对象以进行自定义选项。可能的选项
domains
: (数组) 默认值为['localhost', '127.0.0.1', '::1']
。validityDays
: (数字) 默认值为1
。
用户提供的证书
设置 https: { cert, key }
,其中 cert 和 key 是 SSL 证书的路径。对于加密的私钥,您还需要在 https
对象上设置 passphrase
。
要提供存储在密钥库中的证书,请设置 https: { pfx }
并指定密钥库的路径。当密钥库受密码保护时,也需要设置 passphrase
。
您也可以提供内联的 cert 和 key,而不是从文件系统读取。在这种情况下,它们应该以 --
开头。
显示URL
- 默认值:
true
(在测试环境下强制禁用)
显示监听 URL 的 CLI 消息。
基础URL
- 默认值:
/
打开
- 默认值:
false
(在测试和生产环境下强制禁用)
在浏览器中打开 URL。静默忽略错误。
剪贴板
- 默认值:
false
(在测试和生产环境下强制禁用)
将 URL 复制到剪贴板。静默忽略错误。
是否测试
- 默认值:
process.env.NODE_ENV === 'test'
检测是否在测试环境中运行以禁用某些功能。
自动关闭
- 默认值:
true
当进程中接收到 exit
事件、SIGTERM
、SIGINT
或 SIGHUP
信号时自动关闭。
公共URL
- 默认值:(第一个公共监听 URL)
在 CLI 输出中显示的公共 URL
二维码
- 默认值:
true
为公共地址打印二维码。
公开
- 默认值:开发环境或
hostname
为localhost
时为false
,生产环境为true
启用此选项后,listhen 将尝试监听所有网络接口。您也可以使用 --host
CLI 标志启用此选项。
ws
- 默认值:
false
启用实验性的 WebSocket 支持,使用 unjs/crossws 或 Node.js upgrade 处理函数。
此选项可以是 Node.js upgrade
处理函数 ((req, head) => void
) 或一个使用 CrossWS Hooks 的对象。
当使用开发服务器 CLI 时,您可以轻松地使用 --ws
和名为 websocket
的命名导出,来定义支持 HMR 的 CrossWS Hooks!