unjs / listhen

πŸ‘‚ Elegant HTTP Listener
Other
405 stars 28 forks source link

πŸ‘‚ listhen

npm version npm downloads

Elegant HTTP listener!

πŸ‘‰ Online Playground

Features

βœ… Dev server with HMR, static, WebSockets and typescript support with unjs/jiti

βœ… Works with Node.js, express, and unjs/h3 out of the box

βœ… Show the QR code of the public URL with unjs/uqr

βœ… Tunnel your local server to the world with unjs/untun

βœ… Assign a port or fallback to a nicer alternative with unjs/get-port-please

βœ… Gracefully shutdown Server with http-shutdown

βœ… Zero Config WebSockets with unjs/crossws

βœ… Copy the URL to the clipboard

βœ… HTTPS support with self-signed certificates

βœ… Open URL in browser

βœ… Detect test and production environments to auto-adjust behavior

βœ… Close on the exit signal

Quick Usage (CLI)

You can run your applications in localhost with typescript support and watch mode using listhen CLI:

Create index.ts:

export default (req, res) => {
  res.end("Hello World!");
};

or using unjs/h3:

import { createApp, eventHandler } from "h3";

export const app = createApp();

app.use(
  "/",
  eventHandler(() => "Hello world!"),
);

or use npx to invoke listhen command:

npx listhen -w ./index.ts

Usage (API)

Install package:

# pnpm
pnpm i listhen

# npm
npm i listhen

# yarn
yarn add listhen

Import into your Node.js project:

// 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?)

Options

port

Port to listen.

hostname

Default hostname to listen.

https

Listen on HTTPS with SSL enabled.

Self-Signed Certificate

By setting https: true, listhen will use an auto-generated self-signed certificate.

You can set https to an object for custom options. Possible options:

User-Provided Certificate

Set https: { cert, key } where the cert and key are paths to the SSL certificates. With an encrypted private key, you also need to set passphrase on the https object.

To provide a certificate stored in a keystore set https: { pfx } with a path to the keystore. When the keystore is password protected also set passphrase.

You can also provide an inline cert and key instead of reading from the filesystem. In this case, they should start with --.

showURL

Show a CLI message for the listening URL.

baseURL

open

Open the URL in the browser. Silently ignores errors.

clipboard

Copy the URL to the clipboard. Silently ignores errors.

isTest

Detect if running in a test environment to disable some features.

autoClose

Automatically close when an exit event, SIGTERM, SIGINT or SIGHUP signal is received in the process.

publicURL

The public URL to show in the CLI output

qr

Print QR Code for public address.

public

When enabled, listhen tries to listen to all network interfaces. You can also enable this option using --host CLI flag.

ws

Enable experimental WebSocket support using unjs/crossws or node upgrade handler.

Option can be a function for Node.js upgrade handler ((req, head) => void) or an Object to use CrossWS Hooks.

When using dev server CLI, you can easily use --ws and a named export called websocket to define CrossWS Hooks with HMR support!

License

Published under the MIT license. Made by @pi0 and community πŸ’›


πŸ€– auto updated with automd