Go to file
2025-04-08 20:01:59 -04:00
cmd/esr first 2024-10-09 14:22:28 -04:00
data pre-copilot 2025-04-08 19:19:36 -04:00
internal fix --watch 2025-04-08 20:01:59 -04:00
.gitignore pre-copilot 2025-04-08 19:19:36 -04:00
esr fix --watch 2025-04-08 20:01:59 -04:00
go.mod first 2024-10-09 14:22:28 -04:00
go.sum first 2024-10-09 14:22:28 -04:00
Makefile first 2024-10-09 14:22:28 -04:00
NextChange.md pre-copilot 2025-04-08 19:19:36 -04:00
README.md fix init 2024-10-09 18:12:54 -04:00


                           ░▒▓████████▓▒░░▒▓███████▓▒░▒▓███████▓▒░
                           ░▒▓█▓▒░      ░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░
                           ░▒▓█▓▒░      ░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░
                           ░▒▓██████▓▒░  ░▒▓██████▓▒░░▒▓███████▓▒░
                           ░▒▓█▓▒░             ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
                           ░▒▓█▓▒░             ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
                           ░▒▓████████▓▒░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░

esr

This is a simple esbuild-powered dev server. It has livereloading. It's fast. It's configured with YAML.

For the minimalist. For the developer who misses the old web. For the developer who is tired of configuring your build tools.

Quickstart

# In an empty directory
$ esr init
$ esr --serve src/index.ts
esr :: Serving on http://localhost:1234

src/index.ts is bundled and included in the HTML page served at the address above.

Example configuration

These are all defaults. You don't need to do any of this. You can if you want to, but you don't have to.

# Defaults
bundle: true
platform: browser # browser | node
format: esm # esm | cjs | iife
outdir: public
minify: false
minifyWhitespace: false
minifyIdentifiers: false
sourcemap: true

# Optional. Applies to `--serve`, or `--run --watch`.
# Files that match these paths trigger reload or rerun when they are changed.
watch:
  paths: ['src/**/*.{ts,tsx,css}', 'public/index.html']

# Each mode inherits from the configuration above, but can
# override certain options as needed.
serve:
  html: public/index.html
  port: 1234

# When building, you might want to override some of the defaults
build:
  minify: true
  minifyWhitespace: true
  minifyIdentifiers: true
  sourcemap: false

run:
  # For example: <runtime> <outfile>
  runtime: bun # node | bun | ??

jsx: automatic
jsxFactory: React.createElement

# By default, loader is undefined.
# You can define loaders with the `loader` property, like this:
loader:
  .js: jsx
  .ts: tsx

When serving an index.html, you can use {{ livereload }} to inject the livereload EventSource logic, and {{ js }} and {{ css }} to inject tags for built assets.

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Application</title>
  {{ css }}
</head>

<body>
  <div id="app"></div>
  {{ livereload }}
  {{ js }}
</body>

</html>