# esm-worker

> A Cloudflare worker handles all requests of esm.sh at the edge(earth).

Latest version **0.135.18** (published 2024-11-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install esm-worker
pnpm add esm-worker
yarn add esm-worker
bun add esm-worker
```

## Health

**Score 35/100 (D)** — status: maintenance-mode.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: stale; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.135.18 |
| Published | 2024-11-13 |
| First published | 2023-05-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM |
| Dependencies | 0 |
| Unpacked size | 48.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | ije |

## Links

- npm: https://www.npmjs.com/package/esm-worker
- Repository: https://github.com/esm-dev/esm.sh
- Homepage: https://github.com/esm-dev/esm.sh#readme
- Issues: https://github.com/esm-dev/esm.sh/issues
- npm.io page: https://npm.io/package/esm-worker

## Recent versions

- 0.135.18 (latest) — 2024-11-13
- 0.135.17 — 2024-09-03
- 0.135.16 — 2024-04-19
- 0.135.14 — 2024-04-19
- 0.135.13 — 2024-03-17
- 0.135.12 — 2024-03-17
- 0.135.11 — 2024-02-27
- 0.135.10 — 2024-02-23
- 0.135.9 — 2024-02-23
- 0.135.8 — 2024-02-23
- 0.135.7 — 2024-02-23
- 0.135.6 — 2024-02-23
- 0.135.5 — 2024-02-23
- 0.135.4 — 2024-01-03
- 0.135.3 — 2023-12-01
- … 65 more at https://npm.io/package/esm-worker/versions

## README

# esm-worker

A [Cloudflare worker](https://www.cloudflare.com/products/workers) handles all requests of esm.sh at the edge(earth).

- [Cache](https://developers.cloudflare.com/workers/runtime-apis/cache/) everything at the edge
- Store modules in [KV](https://developers.cloudflare.com/workers/runtime-apis/kv)
- Store assets in [R2](https://developers.cloudflare.com/r2/api/workers/workers-api-reference)

## Installation

```bash
npm install esm-worker@^0.135.0
```

## Configuration

You need to add following configuration to your `wrangler.toml`:

```toml
kv_namespaces = [
  {
    binding = "KV",
    id = "YOUR_KV_ID",
    preview_id = "YOUR_PREVIEW_KV_ID"
  }
  # your other namespaces...
]

[vars]
ESM_ORIGIN = "https://esm.sh" # change to your self-hosting esm.sh server if needed
NPM_REGISTRY = "https://registry.npmjs.org/" # change to your private npm registry if needed
# your other vars...

[[r2_buckets]]
binding = "R2"
bucket_name = "YOUR_BUCKET_NAME"
preview_bucket_name = "YOUR_PREVIEW_BUCKET_NAME"
```

Other optional configurations in secrets:

- If you are using a self-hosting esm.sh server with `authSecret` option, you need to add the following configuration:
  ```bash
  wrangler secret put ESM_TOKEN
  ```
- If you are using a private npm registry, you need to add the following configuration:
  ```bash
  wrangler secret put NPM_TOKEN
  ```

## Usage

Wrap your Cloudflare worker with the `withESMWorker` function:

```typescript
import { withESMWorker } from "esm-worker";

// extend the `Env` interface
declare global {
  interface Env {
    // your other vars in `wrangler.toml` ...
  }
}

export default withESMWorker((req, env, ctx) => {
  const { url } = ctx;

  // using a custom homepage
  if (url.pathname === "/") {
    return new Response("<h1>Welcome to esm.sh!</h1>", {
      headers: { "Content-Type": "text/html" },
    });
  }

  // using the cache API
  if (url.pathname === "/boom") {
    return ctx.withCache(() =>
      new Response("Boom!", {
        headers: { "Cache-Control": "public; max-age=3600" },
      })
    );
  }

  // return void to let esm-worker handle the rest requests
});
```

## Deploy to Cloudflare Workers

```bash
wrangler deploy
```

---
_Source: https://npm.io/package/esm-worker · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
