Logo of listhen

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 事件、SIGTERMSIGINTSIGHUP 信号时自动关闭。

公共URL

  • 默认值:(第一个公共监听 URL)

在 CLI 输出中显示的公共 URL

二维码

  • 默认值:true

为公共地址打印二维码。

公开

  • 默认值:开发环境或 hostnamelocalhost 时为 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

许可

根据 MIT 许可证发布。由 @pi0社区 💛 制作