Runtime Bun
Bun es un runtime y conjunto de herramientas JavaScript rápido y todo-en-uno: runtime, gestor de paquetes, empaquetador y ejecutor de pruebas.
Cuándo usar
- Prefiere Bun para: proyectos nuevos JS/TS, scripts donde la velocidad de instalación/ejecución importa, despliegues en Vercel con runtime Bun, y cuando deseas un solo conjunto de herramientas (ejecutar + instalar + probar + compilar).
- Prefiere Node para: máxima compatibilidad con el ecosistema, herramientas heredadas que asumen Node, o cuando una dependencia tiene problemas conocidos con Bun.
Úsalo cuando: estés adoptando Bun, migrando desde Node, escribiendo o depurando scripts/pruebas de Bun, o configurando Bun en Vercel u otras plataformas.
Cómo funciona
- Runtime: Runtime compatible con Node (construido sobre JavaScriptCore, implementado en Zig).
- Gestor de paquetes:
bun installes significativamente más rápido que npm/yarn. El archivo de bloqueo esbun.lock(texto) por defecto en Bun actual; versiones anteriores usabanbun.lockb(binario). - Empaquetador: Empaquetador y transpilador incorporado para aplicaciones y bibliotecas.
- Ejecutor de pruebas:
bun testincorporado con API similar a Jest.
Migración desde Node: Reemplaza node script.js con bun run script.js o bun script.js. Ejecuta bun install en lugar de npm install; la mayoría de los paquetes funcionan. Usa bun run para scripts npm; bun x para ejecuciones únicas estilo npx. Los módulos integrados de Node son compatibles; prefiere las APIs de Bun donde existan para mejor rendimiento.
Vercel: Establece el runtime como Bun en la configuración del proyecto. Compilación: bun run build o bun build ./src/index.ts --outdir=dist. Instalación: bun install --frozen-lockfile para despliegues reproducibles.
Ejemplos
Ejecutar e instalar
# Instala dependencias (crea/actualiza bun.lock o bun.lockb)
bun install
# Ejecuta un script o archivo
bun run dev
bun run src/index.ts
bun src/index.ts
Scripts y entorno
bun run --env-file=.env dev
FOO=bar bun run script.ts
Pruebas
bun test
bun test --watch
// test/example.test.ts
import { expect, test } from "bun:test";
test("suma", () => {
expect(1 + 2).toBe(3);
});
API de runtime
const file = Bun.file("package.json");
const json = await file.json();
Bun.serve({
port: 3000,
fetch(req) {
return new Response("Hola");
},
});
Mejores prácticas
- Confirma el archivo de bloqueo (
bun.lockobun.lockb) para instalaciones reproducibles. - Prefiere
bun runpara scripts. Para TypeScript, Bun ejecuta.tsde forma nativa. - Mantén las dependencias actualizadas; Bun y el ecosistema evolucionan rápidamente.