Skip to content

import Run from "/de/snippets/cli/run.mdx";

Die Bun-Laufzeit ist darauf ausgelegt, schnell zu starten und schnell zu laufen.

Unter der Haube verwendet Bun die JavaScriptCore-Engine, die von Apple für Safari entwickelt wurde. In den meisten Fällen ist die Start- und Laufleistung schneller als bei V8, der Engine, die von Node.js und Chromium-basierten Browsern verwendet wird. Sein Transpiler und seine Laufzeit sind in Zig geschrieben, einer modernen Hochleistungssprache. Unter Linux führt dies zu Startzeiten, die 4x schneller sind als bei Node.js.

BefehlZeit
bun hello.js5,2ms
node hello.js25,1ms

Dieser Benchmark basiert auf der Ausführung eines einfachen Hello World-Skripts unter Linux.

Eine Datei ausführen

Verwenden Sie bun run, um eine Quelldatei auszuführen.

bash
bun run index.js

Bun unterstützt TypeScript und JSX out of the box. Jede Datei wird zur Laufzeit von Buns schnellem nativen Transpiler transpiliert, bevor sie ausgeführt wird.

bash
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsx

Alternativ können Sie das run-Schlüsselwort weglassen und den "nackten" Befehl verwenden; er verhält sich identisch.

bash
bun index.tsx
bun index.js

--watch

Um eine Datei im Watch-Modus auszuführen, verwenden Sie die --watch-Flagge.

bash
bun --watch run index.tsx

::: note Wenn Sie bun run verwenden, setzen Sie Bun-Flags wie --watch unmittelbar nach bun. :::

bash
bun --watch run dev # ✔️ tun Sie dies
bun run dev --watch # ❌ tun Sie dies nicht

Flags, die am Ende des Befehls auftreten, werden ignoriert und an das "dev"-Skript selbst weitergegeben.

Ein package.json-Skript ausführen

::: note Vergleichbar mit npm run <script> oder yarn <script> :::

sh
bun [bun flags] run <script> [script flags]

Ihr package.json kann eine Anzahl benannter "scripts" definieren, die Shell-Befehlen entsprechen.

json
{
  // ... andere Felder
  "scripts": {
    "clean": "rm -rf dist && echo 'Done.'",
    "dev": "bun server.ts"
  }
}

Verwenden Sie bun run <script>, um diese Skripte auszuführen.

bash
bun run clean
rm -rf dist && echo 'Done.'
txt
Cleaning...
Done.

Bun führt den Skriptbefehl in einer Subshell aus. Unter Linux & macOS sucht es nach den folgenden Shells in der Reihenfolge und verwendet die erste, die es findet: bash, sh, zsh. Unter Windows verwendet es bun shell, um bash-ähnliche Syntax und viele gängige Befehle zu unterstützen.

NOTE

⚡️ Die Startzeit für `npm run` unter Linux beträgt etwa 170ms; mit Bun sind es `6ms`.

Skripte können auch mit dem kürzeren Befehl bun <script> ausgeführt werden. Wenn es jedoch einen eingebauten Bun-Befehl mit demselben Namen gibt, hat der eingebaute Befehl Vorrang. Verwenden Sie in diesem Fall den expliziteren Befehl bun run <script>, um Ihr Paket-Skript auszuführen.

bash
bun run dev

Um eine Liste der verfügbaren Skripte anzuzeigen, führen Sie bun run ohne Argumente aus.

bash
bun run
txt
quickstart scripts:

 bun run clean
   rm -rf dist && echo 'Done.'

 bun run dev
   bun server.ts

2 scripts

Bun beachtet Lifecycle-Hooks. Zum Beispiel führt bun run clean preclean und postclean aus, falls definiert. Wenn das pre<script> fehlschlägt, führt Bun das Skript selbst nicht aus.

--bun

Es ist üblich, dass package.json-Skripte auf lokal installierte CLIs wie vite oder next verweisen. Diese CLIs sind oft JavaScript-Dateien, die mit einem Shebang markiert sind, um anzuzeigen, dass sie mit node ausgeführt werden sollen.

js
#!/usr/bin/env node

// Dinge tun

Standardmäßig respektiert Bun diesen Shebang und führt das Skript mit node aus. Sie können dieses Verhalten jedoch mit der --bun-Flagge überschreiben. Für Node.js-basierte CLIs wird die CLI damit mit Bun statt mit Node.js ausgeführt.

bash
bun run --bun vite

Filterung

In Monorepos, die mehrere Pakete enthalten, können Sie das --filter-Argument verwenden, um Skripte in vielen Paketen gleichzeitig auszuführen.

Verwenden Sie bun run --filter <name_pattern> <script>, um <script> in allen Paketen auszuführen, deren Name mit <name_pattern> übereinstimmt. Wenn Sie beispielsweise Unterverzeichnisse mit Paketen namens foo, bar und baz haben, führt die Ausführung von

bash
bun run --filter 'ba*' <script>

<script> sowohl in bar als auch in baz aus, aber nicht in foo.

Weitere Details finden Sie auf der Dokumentationsseite für filter.

bun run - zum Pipen von Code von stdin

bun run - ermöglicht es, JavaScript, TypeScript, TSX oder JSX von stdin zu lesen und auszuführen, ohne zuerst in eine temporäre Datei zu schreiben.

bash
echo "console.log('Hello')" | bun run -
txt
Hello

Sie können bun run - auch verwenden, um Dateien in Bun umzuleiten. Um beispielsweise eine .js-Datei so auszuführen, als wäre es eine .ts-Datei:

bash
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.js
txt
This is TypeScript!

Der Einfachheit halber wird der gesamte Code bei Verwendung von bun run - als TypeScript mit JSX-Unterstützung behandelt.

bun run --console-depth

Steuern Sie die Tiefe der Objektinspektion in der Konsolenausgabe mit der --console-depth-Flagge.

bash
bun --console-depth 5 run index.tsx

Dies legt fest, wie tief verschachtelte Objekte in der console.log()-Ausgabe angezeigt werden. Die Standardtiefe ist 2. Höhere Werte zeigen mehr verschachtelte Eigenschaften, können aber bei komplexen Objekten zu ausführlicher Ausgabe führen.

ts
const nested = { a: { b: { c: { d: "deep" } } } };
console.log(nested);
// Mit --console-depth 2 (Standard): { a: { b: [Object] } }
// Mit --console-depth 4: { a: { b: { c: { d: 'deep' } } } }

bun run --smol

In speicherbeschränkten Umgebungen verwenden Sie die --smol-Flagge, um den Speicherverbrauch auf Kosten der Leistung zu reduzieren.

bash
bun --smol run index.tsx

Dadurch wird der Garbage Collector häufiger ausgeführt, was die Ausführung verlangsamen kann. Es kann jedoch in Umgebungen mit begrenztem Speicher nützlich sein. Bun passt die Heap-Größe des Garbage Collectors automatisch basierend auf dem verfügbaren Speicher an (unter Berücksichtigung von cgroups und anderen Speichergrenzen) mit und ohne die --smol-Flagge, daher ist dies hauptsächlich für Fälle nützlich, in denen Sie die Heap-Größe langsamer wachsen lassen möchten.

Auflösungsreihenfolge

Absolute Pfade und Pfade, die mit ./ oder .\\ beginnen, werden immer als Quelldateien ausgeführt. Sofern Sie nicht bun run verwenden, wird beim Ausführen einer Datei mit einer erlaubten Erweiterung die Datei einem package.json-Skript vorgezogen.

Wenn es ein package.json-Skript und eine Datei mit demselben Namen gibt, priorisiert bun run das package.json-Skript. Die vollständige Auflösungsreihenfolge ist:

  1. package.json-Skripte, z.B. bun run build
  2. Quelldateien, z.B. bun run src/main.js
  3. Binärdateien von Projektpaketen, z.B. bun add eslint && bun run eslint
  4. (nur bun run) Systembefehle, z.B. bun run ls

Bun von www.bunjs.com.cn bearbeitet