Bun

Boite a outils JavaScript tout-en-un - runtime ultra-rapide, bundler, testeur et gestionnaire de paquets

TL;DR

Quoi: Runtime JavaScript tout-en-un, bundler, exécuteur de tests et gestionnaire de paquets.

Pourquoi: 4x plus rapide que Node.js, TypeScript natif, bundler intégré, remplacement direct de Node.

Quick Start

Installer:

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

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

# Vérifier la version
bun --version

Exécuter des scripts:

bun run index.ts     # Exécuter TypeScript directement
bun run index.js     # Exécuter JavaScript
bun run dev          # Exécuter un script package.json

Cheatsheet

CommandeDescription
bun run fileExécuter un fichier
bun installInstaller les dépendances
bun add pkgAjouter une dépendance
bun remove pkgSupprimer un paquet
bun testExécuter les tests
bun buildBundler pour la production
bun initCréer un nouveau projet

Gotchas

Package management

# Initialiser le projet
bun init

# Installer les dépendances
bun install

# Ajouter un paquet
bun add express

# Ajouter une dépendance de dev
bun add -d typescript

# Supprimer un paquet
bun remove lodash

# Mettre à jour les paquets
bun update

Running scripts

# Exécuter TypeScript directement
bun run app.ts

# Exécuter avec mode watch
bun --watch run app.ts

# Exécuter un script package.json
bun run dev

# Exécuter un script (raccourci)
bun dev

HTTP server

// server.ts
const server = Bun.serve({
  port: 3000,
  fetch(request) {
    const url = new URL(request.url);

    if (url.pathname === "/") {
      return new Response("Bonjour Bun!");
    }

    if (url.pathname === "/json") {
      return Response.json({ message: "Bonjour" });
    }

    return new Response("Non trouvé", { status: 404 });
  },
});

console.log(`Écoute sur http://localhost:${server.port}`);

File I/O

// Lire un fichier
const file = Bun.file("./data.json");
const text = await file.text();
const json = await file.json();

// Écrire un fichier
await Bun.write("./output.txt", "Bonjour le monde");
await Bun.write("./data.json", JSON.stringify({ key: "value" }));

// Vérifier si existe
const exists = await Bun.file("./data.json").exists();

Testing

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

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

  test("test async", async () => {
    const result = await Promise.resolve(42);
    expect(result).toBe(42);
  });
});
bun test
bun test --watch

Bundler

# Bundler pour le navigateur
bun build ./src/index.ts --outdir ./dist

# Avec minification
bun build ./src/index.ts --outdir ./dist --minify

# Pour Node.js
bun build ./src/index.ts --outdir ./dist --target node
// Bundling programmatique
const result = await Bun.build({
  entrypoints: ['./src/index.ts'],
  outdir: './dist',
  minify: true,
  splitting: true,
});

Next Steps