Bun statt Node.js: Ein praktischer Einstieg

Installation, erste Schritte und wann sich der Wechsel lohnt

5 Minuten
Bun statt Node.js: Ein praktischer Einstieg
#Bun #Node.js #JavaScript #TypeScript
SerieBun: Die moderne JavaScript-Runtime
Teil 1 von 5

Bun ist eine JavaScript-Runtime, die Node.js ersetzen will. Das Versprechen: schnellere Starts, schnellere Builds, weniger Tools. Aber wie sieht das in der Praxis aus?

Installation

Bun lässt sich mit einem Befehl installieren:

# macOS, Linux, WSL
curl -fsSL https://bun.sh/install | bash

# Windows (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

# Homebrew
brew install oven-sh/bun/bun

Nach der Installation ist bun im Terminal verfügbar:

bun --version

Erste Schritte

Bun kann Node.js-Projekte direkt ausführen:

bun run index.ts

TypeScript funktioniert ohne Konfiguration. Kein ts-node, kein tsconfig.json für einfache Skripte.

Neues Projekt erstellen:

bun init

Das erzeugt eine minimale Projektstruktur mit package.json, tsconfig.json und einer index.ts.

Befehle im Vergleich

AktionNode.jsBun
Skript ausführennode index.jsbun index.js
TypeScript ausführennpx ts-node index.tsbun index.ts
Dependencies installierennpm installbun install
Paket hinzufügennpm install expressbun add express
Dev-Dependencynpm install -D vitestbun add -d vitest
Skript aus package.jsonnpm run devbun run dev
Tests ausführennpm testbun test

Die Befehle sind ähnlich genug, dass der Wechsel leicht fällt.

Migration von Node.js

Für die meisten Projekte reicht es, npm durch bun zu ersetzen:

# Statt npm install
bun install

# Statt npm run dev
bun run dev

Bun erstellt eine bun.lockb (Binär-Lockfile) statt package-lock.json. Beide können parallel existieren.

Was funktioniert:

  • Express, Fastify, Hono
  • Prisma, Drizzle
  • React, Vue, Svelte
  • Die meisten npm-Pakete

Was Probleme machen kann:

  • Native Node.js-Addons (C++-basiert)
  • Pakete, die node-gyp brauchen
  • Sehr alte Pakete mit veralteten APIs

package.json Scripts

Bun führt Scripts schneller aus, weil kein separater Prozess gestartet wird:

{
  "scripts": {
    "dev": "bun --watch src/index.ts",
    "build": "bun build src/index.ts --outdir dist",
    "test": "bun test"
  }
}

Der --watch Flag startet den Server bei Dateiänderungen neu.

Integrierter Test-Runner

Bun bringt einen Jest-kompatiblen Test-Runner mit:

// math.test.ts
import { expect, test } from "bun:test";

test("addition", () => {
  expect(2 + 2).toBe(4);
});
bun test

Die meisten Jest-Matcher funktionieren. Mocking ist eingebaut.

Wann lohnt sich der Wechsel?

Gute Kandidaten:

  • Neue Projekte ohne Legacy-Abhängigkeiten
  • TypeScript-Projekte (kein Setup nötig)
  • Skripte und CLI-Tools
  • APIs mit modernen Frameworks (Hono, Elysia)

Besser bei Node.js bleiben:

  • Projekte mit vielen nativen Addons
  • Enterprise-Umgebungen mit strikten Vorgaben
  • Wenn das Team Node.js gut kennt und Bun nicht

Hybride Nutzung: Bun für lokale Entwicklung, Node.js für Production – funktioniert oft problemlos.

Performance-Unterschiede

Die oft zitierten “4x schneller”-Zahlen beziehen sich auf Startzeiten und bestimmte Operationen. In der Praxis:

  • Spürbar schneller: bun install, Skript-Starts, Tests
  • Ähnlich schnell: HTTP-Server unter Last (I/O-bound)
  • Manchmal langsamer: Spezielle Node.js-Optimierungen

Für die meisten Projekte ist der Performance-Unterschied angenehm, aber nicht der Hauptgrund für den Wechsel.

Weiterführend: Für performante Web-APIs mit Bun siehe Ultra-performante Web-APIs mit Hono.


Quellen