JavaScript ist eine der beliebtesten und am weitesten verbreiteten Programmiersprachen der Welt. Sie treibt Webanwendungen, mobile Anwendungen, Desktop-Software und sogar eingebettete Geräte an. Trotz ihrer weiten Verbreitung ist sie nicht ohne Herausforderungen. Wie alle Technologien kämpft auch JavaScript mit Problemen in Bezug auf Leistung, Kompatibilität, Sicherheit und Komplexität.

Um diese Probleme zu lösen, wurden im Laufe der Jahre mehrere JavaScript-Laufzeiten entwickelt. Besonders hervorzuheben sind Node.js und Deno, die beide Lösungen für die Einschränkungen von JavaScript bieten. Sie haben zwar viele Probleme gelöst, aber auch neue eingeführt, wie z. B. die Notwendigkeit unnötiger Pakete und eine langsamere Laufzeitleistung.

Jetzt gibt es Bun, eine JavaScript-Laufzeitumgebung, die es schon eine Weile gibt, aber das Team hat erst im September 2023 eine stabile Version veröffentlicht. Bun soll eine direkte, effizientere Alternative zu Node.js sein.

In diesem Artikel erfährst du mehr über Bun, seine besonderen Eigenschaften und wie du es in deine JavaScript-Projekte integrieren kannst.

Was ist Bun?

Startseite der Bun.sh-Website
Startseite der Bun.sh-Website

Bun ist eine JavaScript-Laufzeitumgebung, die hauptsächlich in der Programmiersprache Zig geschrieben ist. Sie zielt darauf ab, die Grenzen von Node.js zu überwinden und gleichzeitig eine schlankere und effizientere Entwicklung zu ermöglichen.

Bun ist jedoch nicht nur eine weitere JavaScript-Runtime, wie viele andere, die in den letzten Jahren aufgetaucht sind: Es ist ein All-in-One-Toolkit, das die Art und Weise, wie Entwickler/innen mit JavaScript und TypeScript arbeiten, revolutionieren soll. Durch die Erweiterung von JavaScriptCore, der Engine von Apples Safari, ermöglicht Bun schnelle Startzeiten und eine bessere Speichernutzung.

Anders als Node.js ist Bun nicht auf npm angewiesen und benötigt keine externen Abhängigkeiten für den Betrieb. Stattdessen verfügt es über eine eingebaute Standardbibliothek, die Funktionen für verschiedene Protokolle und Module bietet, darunter Umgebungsvariablen, HTTP, WebSocket, Dateisystem und mehr.

Außerdem bietet es sofortige Unterstützung für TypeScript. Und da Bun jede JavaScript- oder TypeScript-Quelldatei intern transpiliert, kannst du TypeScript-Dateien direkt kompilieren und ausführen, ohne sie zusätzlich konfigurieren oder transpilieren zu müssen.

Bun wird mit einer leistungsstarken Befehlszeilenschnittstelle (CLI) geliefert, mit der du deinen Code mit den folgenden einfachen Befehlen run, format, lint, test͏ und bundle erstellen kannst:

  • bun run – Führt eine JavaScript- oder TypeScript-Datei mit Bun aus.
  • bun test – führt Unit-Tests mit dem in Bun integrierten Testin͏g-Framework aus.
  • bun fmt – formt Code mit dem in Bun integrierten Code-Formatierer.
  • bun lint – lintet Code mit Buns eingebautem Code-Linter.
  • bun bundle – bündelt Code mit dem in Bun integrierten Code-Bündler.

Ein weiteres herausragendes Merkmal von Bun ist die Hot-Reloading-Funktion, mit der Codeänderungen während des Betriebs aktualisiert werden, ohne dass der Zustand der Anwendung verändert wird. Dies ist eine deutliche Verbesserung gegenüber Node.js, wo für ähnliche Funktionen externe Pakete wie nodemon oder das --watch experimental flag benötigt werden. Im Gegensatz dazu vereinfacht Bun diesen Prozess mit der --hot flag.

Neben den technischen Vorteilen von Bun gibt es auch eine wachsende Gemeinschaft von Nutzern, die aktiv zur Entwicklung und Verbesserung von Bun beitragen. Diese lebendige Gemeinschaft sorgt dafür, dass Bun stets auf dem neuesten Stand bleibt und bietet zahlreiche Ressourcen zum Lernen und zur Fehlerbehebung.

Kernfunktionen von Bun

Neben Hot-Reloading, nativer Unterstützung für TypeScript und schnelleren Startzeiten verfügt Bun über mehrere Kernfunktionen, die zu seiner Beliebtheit und Leistung als JavaScript-Laufzeitumgebung beitragen: der Bundler, der Test-Runner und der Paketmanager. Wir wollen diese Funktionen im Detail besprechen.

Bundler

Ein Bundler fasst JavaScript-Code und seine Abhängigkeiten in einer einzigen Datei zusammen͏ und optimiert so die Ladeeffizienz für Browser oder innerhalb von Node.js-Anwendungen. Node.js verfügt nicht über einen eigenen Bundler, so dass sich Entwickler/innen beim Umgang mit JavaScript-Code auf Bundler von Drittanbietern wie Rollup, Webpack und ͏Parcel verlassen müssen.

Im Gegensatz dazu bietet Bun einen eingebauten Bundler, der nur eine minimale Konfiguration erfordert und verschiedene Modulformate unterstützt. Außerdem verfügt er über integrierte Optimierungen, die eine schnellere Bündelung ermöglichen. Im Vergleich dazu ist der Bundler von Bun 1,75x schneller als ͏esbuild, 150x schneller als Parcel, 180x schneller als Rollup + Terser und 220x schneller als Webpack.

Du ͏kannst dein Projekt über den Befehl bun bundle ͏<source> --out-dir <directory> bündeln. Es erzeugt die Ausgabedatei in deinem angegebenen Ausgabeverzeichnis:

Code und Terminal, in dem der Build-Befehl ausgeführt wurde
Bündeln eines Projekts mit Bun

Test Runner

Testen ist ein integraler Bestandteil der Softwareentwicklung, um die Funktionalität des Codes sicherzustellen und mögliche Probleme vor der Produktion zu erkennen. Bun integriert daher einen Test Runner in sein Toolkit.

Darüber hinaus haben Node.js-Entwickler externe Test-Frameworks wie Jest eingesetzt, die zwar leistungsstark und flexibel sind, aber zusätzliche Abhängigkeiten und Konfigurationsaufwand in das Projekt einbringen.

Bun hingegen integriert seinen eigenen Test-Runner und legt den Schwerpunkt auf Geschwindigkeit und Kompatibilität. Dieser integrierte Ansatz bietet mehrere Vorteile:

  • Geschwindigkeit – Mit dem in die Laufzeit integrierten Test-Runner werden die Tests direkt ausgeführt, ohne dass externe Test-Frameworks geladen werden müssen. Das Ergebnis ist eine schnellere Testausführung, was besonders in großen Codebasen oder Umgebungen mit kontinuierlicher Integration von Vorteil ist.
  • Kompatibilität – Der integrierte Test-Runner arbeitet nahtlos mit den anderen Funktionen von Bun zusammen. Er nutzt die schnellen Startzeiten und die effiziente Speichernutzung von Bun und stellt sicher, dass deine Tests in einer Umgebung laufen, die deiner Produktionsumgebung entspricht.
  • Einfachheit – Mit dem integrierten Test-Runner musst du dich nicht um die Konfiguration und Kompatibilität zwischen deiner Laufzeitumgebung und deinem Test-Framework kümmern. Du kannst Tests ähnlich wie den Anwendungscode schreiben und dieselben Sprachfunktionen und APIs verwenden.

Der Test-Runner in Bun ist mit verschiedenen Test-Frameworks voll kompatibel͏. Das Ausführen von Tests ist so einfach wie das Ausführen des Befehls bun test

Da Bun von Haus aus TypeScript ͏und JSX unterstützt, brauchst du keine zusätzlichen Konfigurationen oder ͏Plugins. Du kannst dich auf das Schreiben hochwertiger Tests konzentrieren, anstatt die Testumgebung einzurichten.͏

Paketmanager

Der Node.js kompatible Paketmanager von Bun ist deutlich schneller als npm, yarn und pnpm. Er erhöht die Geschwindigkeit, reduziert die Festplattennutzung und minimiert den Speicherbedarf.

Benchmark von Bun, pnpm, npm und Yarn durch das Bun-Team
Benchmark von Bun, pnpm, npm und Yarn durch das Bun-Team

Mithilfe von Symli͏nks verknüpft Bun die Pakete für jedes Projekt an einem zentralen Ort, so dass die Module für nachfolgende Projekte nicht erneut heruntergeladen werden müssen.͏ Obwohl die Verwendung von Symlinks in Paketmanagern nicht völlig neu ist, übertrifft die Implementierung von Bun andere.

Erste Schritte mit Bun

Um Bun auf deinem Computer nutzen zu können, musst du es installieren. Es gibt verschiedene Methoden, Bun zu installieren, z. B. mit einem cURL-Befehl, npm oder Homebrew. Es ist jedoch wichtig zu wissen, dass Bun am besten auf macOS- oder Linux-Systemen eingesetzt wird.

Um Bun über den cURL-Befehl zu installieren, führe Folgendes in deinem Terminal aus:

curl -fsSL https://bun.sh/install | bash

Nach erfolgreicher Installation überprüfst du sie, indem du bun --version in deinem Terminal ausführst. Dies bestätigt, dass Bun einsatzbereit ist.

Jetzt kannst du die Möglichkeiten von Bun erkunden. Du kannst Bun verwenden, um deine Node.js-Projekte mit dem Befehl bun run auszuführen. Um eine TypeScript-Datei namens index.ts auszuführen, verwende bun run index.ts – Bun transpiliert deine TypeScript-Dateien, sodass du keine zusätzlichen Pakete benötigst.

Der Nutzen von Bun geht über diese Grundlagen hinaus. Es lässt sich nahtlos mit JavaScript-Frameworks wie React und Next.js integrieren. Um mehr über die Funktionen von Bun zu erfahren, schau dir die offizielle Dokumentation an.

Wie du Node.js-Projekte mit Bun ausführst

Die Migration oder der Betrieb deiner Node.js-Projekte mit Bun ist ganz einfach und erfordert nur ein paar Bun CLI-Befehle. Folge diesen Schritten, um deine Node.js-Projekte mit Bun auszuführen:

  1. Zuerst installierst du Bun. Sobald Bun installiert ist, navigiere zu dem Verzeichnis, in dem sich die Dateien deines Node.js-Projekts befinden (einschließlich der Datei package.json ). Im Arbeitsverzeichnis deines Projekts führst du folgenden Befehl aus:
    bun install

    Mit dem obigen Befehl liest Bun die package.json-Datei in deinem Node.js-Projektverzeichnis, überprüft die Datei ͏lock .json (falls vorhanden) und installiert die aufgelisteten Abhängigkeiten mithilfe des integrierten Paketmanagers.

    Installieren von Abhängigkeiten mit Bun
    Installieren von Abhängigkeiten mit Bun

  2. Wenn die Abhängigkeiten installiert sind, kannst du dein Projekt mit Bun ausführen. Verwende den Befehl bun run, gefolgt von der Einstiegspunktdatei deines Projekts:
    bun run 

    Wenn der Einstiegspunkt deines Projekts zum Beispiel eine Datei namens index.js ist, gibst du bun run index.͏js ein.

    Bun führt die JavaScript- oder TypeScript-Ko͏de in der angegebenen Datei aus. Wenn in der package.json-Datei deines Projekts ein Startskript definiert ist, kannst du auch bun start verwenden, um dein Projekt auszuführen.

    Ausführen des Bun-Projekts in Visual Studio Code
    Ausführen des Bun-Projekts in Visual Studio Code

Die Umstellung auf eine neue Laufzeitumgebung kann eine Herausforderung darstellen. Die robuste Unterstützung von Bun für Node.js-Module, die Erkennung globaler Variablen und die Einhaltung des Modulauflösungsalgorithmus von Node.js erleichtern jedoch den Umstieg von Node.js auf Bun.

Angenommen, du arbeitest an einem Node.js-Projekt, das derzeit das Paket dotenv zur Verwaltung von Umgebungsvariablen verwendet. In diesem Fall kannst du das Paket dotenv mitsamt seinem Initialisierungscode aus deinem Projekt entfernen. Denn Bun hat die Fähigkeit, deine .env-Dateien automatisch zu lesen, wodurch das Paket dotenv überflüssig wird.

Vergiss nicht, dass Bun noch in der Entwicklung ist, deshalb solltest du bei der Migration vorsichtig vorgehen.

Bun mit Kinstas Anwendungs-Hosting integrieren

Das Hosting einer Bun-Anwendung auf Kinsta funktioniert nahtlos mit Kinstas Anwendungs-Hosti͏ng͏ mit Nixpacks, die du zum Erstellen deines Projekts verwendest.

Nixpacks ist, ähnlich wie Buildpacks, ein Open-Source-Projekt, das Container-Images für Anwendungen auf der Grundlage ihres Repositorys erstellt. Dieses Tool nutzt die Nix-Binärdatei, um Anwendungen zu erstellen, Abhängigkeiten zu installieren und Umgebungen zu konfigurieren, wenn sie bereitgestellt werden.

Seine Rust-basierte Architektur sorgt für schnellere Build-Zeiten. Im Vergleich zu Buildpacks zeichnet sich Nixpacks durch ein eingebautes Caching-System aus, das die nachfolgenden Builds erheblich beschleunigt.

Mit der Einführung von Nixpacks unterstreicht Kinsta sein Engagement für Spitzentechnologie und bietet effizientere und flexiblere Lösungen für die Verwaltung von Container-Images und die Rationalisierung des Entwicklungsprozesses.

Um dein Bun-Projekt auf dem Anwendungs-Hosting von Kinsta bereitzustellen, musst du deinen Code zunächst auf einen bevorzugten Git-Anbieter (Bitbucket, GitHub oder GitLab) übertragen. Sobald dein Repository fertig ist, folgst du diesen Schritten, um dein Projekt bei Kinsta bereitzustellen:

  1. Logge dich ein oder erstelle ein Konto, um dein MyKinsta-Dashboard zu sehen.
  2. Autorisiere Kinsta bei deinem Git-Anbieter.
  3. Klicke in der linken Seitenleiste auf Anwendungen und dann auf Anwendung hinzufügen.
  4. Wähle das Repository und den Branch aus, von dem aus du die Anwendung bereitstellen möchtest.
  5. Gib deiner Anwendung einen eindeutigen Namen und wähle den Standort deines Rechenzentrums.
  6. Als Nächstes konfigurierst du deine Build-Umgebung. Wähle die Standard-Build-Maschinen-Konfiguration mit der empfohlenen Nixpacks-Option.
  7. Verwende alle Standardkonfigurationen und klicke dann auf Anwendung erstellen.

Die Bereitstellung dauert in der Regel ein paar Minuten. Wenn sie erfolgreich war, erhältst du einen Link zu deiner Anwendung und ein Dashboard mit Informationen zur Bereitstellung.

Kinsta bietet eine robuste und zuverlässige Infrastruktur für deine Anwendungen. Die Bereitstellung deiner Bun-Anwendung direkt auf der Kinsta-Plattform ist dank der benutzerfreundlichen Oberfläche ganz einfach – es ist keine spezielle Integration erforderlich. Du musst nur deinen Code hochladen, deine Einstellungen konfigurieren und schon ist deine Anwendung einsatzbereit.

Zusammenfassung

Als JavaScript-Laufzeitumgebung hat Bun aus mehreren Gründen an Bedeutung gewonnen. Bun wurde mit dem Fokus auf Leistung und Einfachheit entwickelt, um den Entwicklungsprozess zu rationalisieren und die Gesamteffizienz zu verbessern. Seine modulare Architektur ermöglicht es dir, nur die Komponenten auszuwählen, die du für ein bestimmtes Projekt brauchst, und so unnötigen Overhead zu vermeiden.

Im Gegensatz zu Node.js hat Bun einen geringeren Platzbedarf und schnellere Startup-Zeiten. Dies ist ein entscheidender Vorteil für Anwendungen, die schnelle Reaktionszeiten und eine effiziente Ressourcennutzung erfordern. Die Einfachheit und der modulare Ansatz von Bun tragen zu einer unkomplizierten und anpassbaren Entwicklungserfahrung bei.

Das Hosting deiner Bun-Anwendungen mit dem Anwendungs-Hosting Service von Kinsta ist eine nahtlose und leistungsstarke Lösung. Die robuste Infrastruktur von Kinsta garantiert eine hohe Leistung mit Funktionen wie automatischer Skalierung und schneller Auslieferung von Inhalten.

Wenn du dich für Kinsta entscheidest, wird das Hosting deiner Bun-Anwendungen zu einer zuverlässigen und effizienten Erfahrung, die dir die Freiheit gibt, dich auf die Entwicklung und Optimierung deiner Projekte zu konzentrieren.

Was ist deine Meinung zu Bun? Denkst du, du solltest alle deine Node.js-Anwendungen auf Bun umstellen? Teile uns deine Meinung im Kommentarbereich mit.

Joel Olawanle Kinsta

Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 200 technical articles majorly around JavaScript and it's frameworks.