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.
| Befehl | Zeit |
|---|---|
bun hello.js | 5,2ms |
node hello.js | 25,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.
bun run index.jsBun 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.
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsxAlternativ können Sie das run-Schlüsselwort weglassen und den "nackten" Befehl verwenden; er verhält sich identisch.
bun index.tsx
bun index.js--watch
Um eine Datei im Watch-Modus auszuführen, verwenden Sie die --watch-Flagge.
bun --watch run index.tsx::: note Wenn Sie bun run verwenden, setzen Sie Bun-Flags wie --watch unmittelbar nach bun. :::
bun --watch run dev # ✔️ tun Sie dies
bun run dev --watch # ❌ tun Sie dies nichtFlags, 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> :::
bun [bun flags] run <script> [script flags]Ihr package.json kann eine Anzahl benannter "scripts" definieren, die Shell-Befehlen entsprechen.
{
// ... andere Felder
"scripts": {
"clean": "rm -rf dist && echo 'Done.'",
"dev": "bun server.ts"
}
}Verwenden Sie bun run <script>, um diese Skripte auszuführen.
bun run clean
rm -rf dist && echo 'Done.'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.
bun run devUm eine Liste der verfügbaren Skripte anzuzeigen, führen Sie bun run ohne Argumente aus.
bun runquickstart scripts:
bun run clean
rm -rf dist && echo 'Done.'
bun run dev
bun server.ts
2 scriptsBun 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.
#!/usr/bin/env node
// Dinge tunStandardmäß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.
bun run --bun viteFilterung
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
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.
echo "console.log('Hello')" | bun run -HelloSie 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:
echo "console.log!('This is TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.jsThis 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.
bun --console-depth 5 run index.tsxDies 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.
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.
bun --smol run index.tsxDadurch 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:
- package.json-Skripte, z.B.
bun run build - Quelldateien, z.B.
bun run src/main.js - Binärdateien von Projektpaketen, z.B.
bun add eslint && bun run eslint - (nur
bun run) Systembefehle, z.B.bun run ls