Bun — Runtime y gestor de paquetes JS/TS
Qué es
Bun es un runtime de JavaScript/TypeScript todo-en-uno escrito en Zig. Reemplaza en un solo binario:
| Reemplaza | Razón |
|---|---|
node | Runtime JS/TS — Bun es compatible con la mayoría de APIs de Node |
npm / yarn / pnpm | Gestor de paquetes — instala desde el mismo package.json |
vitest / jest | Test runner — bun test sin configuración extra |
esbuild / vite build | Bundler nativo — transpila TS sin pasos extra |
ts-node / tsx | Ejecución directa de TypeScript — bun run script.ts funciona sin compilar |
Por qué lo usamos en Wiedii
La razón principal es velocidad y simplicidad: bun install es hasta 25× más rápido que npm install, y eliminar herramientas separadas (runtime, bundler, test runner) reduce la superficie de configuración de cada proyecto.
Además, Bun ejecuta TypeScript de forma nativa — no hace falta ts-node, tsx ni pasos de compilación para scripts de desarrollo o tests.
Instalación
Bun se gestiona con mise, no directamente con brew. Esto garantiza que cada proyecto use la versión declarada en su mise.toml.
Global (disponible en cualquier directorio)
# ~/.config/mise/config.toml
[tools]
bun = "1.3.14"
cd ~/.config/mise && mise install --yes && cd -
Por proyecto (mise.toml en la raíz del repo)
[tools]
bun = "1.2.5" # versión específica del proyecto
mise install --yes # instala la versión declarada
brew install buntambién funciona, pero no es el método estándar en Wiedii porque no permite versiones por proyecto. Usar siempre mise.
Comandos habituales en Wiedii
# Instalar dependencias
bun install
# Ejecutar scripts del package.json
bun run dev
bun run build
bun run lint
# Atajo sin "run" para scripts definidos en package.json
bun dev
bun build
# Tests
bun test
bun test --watch
bun test src/utils/ # tests en un directorio concreto
bun test --coverage
# Ejecutar un archivo TypeScript directamente
bun run script.ts
bun run src/seed.ts
# Agregar dependencias
bun add <paquete>
bun add -d <paquete> # devDependency
# Commit interactivo (czg — ver [czg](./czg.md))
bun commit
Setup estándar de un repo Wiedii
El package.json de cualquier repo Wiedii incluye estos scripts mínimos:
{
"scripts": {
"commit": "czg"
}
}
bun commit→ abre el wizard de commits czglefthook installno va enpackage.json— lo gestionamise.tomlvia[hooks].postinstall, con detección automática de CI
En mise.toml, la task de setup orquesta todo con un solo comando:
[hooks]
# experimental en mise — no requiere mise activate
# Se salta automáticamente en CI ($CI=true)
postinstall = "[ -z \"$CI\" ] && lefthook install || true"
[tasks.setup]
run = [
"mise trust",
"mise install --yes",
# Encuentra package.json en root o src/ — funciona independientemente de la estructura del proyecto
"pkg=$(find . -maxdepth 2 -name 'package.json' ! -path '*/node_modules/*' | head -1) && [ -n \"$pkg\" ] && bun install --cwd \"$(dirname \"$pkg\")\" || true"
]
description = "Configura el entorno completo del proyecto"
mise run setup # todo listo en un comando — funciona para cualquier stack
El flujo: mise install → [hooks].postinstall → lefthook install (solo en local, no en CI). bun install se ejecuta si hay package.json en root o en src/.
Compatibilidad con Node
Bun es compatible con la mayoría de APIs de Node (fs, path, crypto, http, etc.) y con el ecosistema npm. Si un paquete o script requiere Node específicamente, mise puede activar ambos en el mismo proyecto:
# mise.toml — cuando el proyecto necesita Node además de Bun
[tools]
bun = "1.2.5"
node = "22.14.0"
Troubleshooting rápido
bun: command not found fuera de un proyecto:
mise ls --current # verificar que bun está activo
cd ~/.config/mise && mise install --yes && cd -
bun install falla con permisos en node_modules:
rm -rf node_modules bun.lockb
bun install
Los tests no encuentran variables de entorno:
# Bun carga automáticamente .env — verificar que el archivo existe
ls -la .env
# o pasar el archivo explícitamente:
bun test --env-file .env.test
Los hooks no se instalan tras bun install:
# lefthook install lo gestiona mise, no bun
# Verificar que el [hooks].postinstall está en mise.toml y ejecutar:
mise install --yes
Referencias
- Documentación oficial Bun
- Bun test runner
- Bun install — gestor de paquetes
- mise — gestor de versiones que activa Bun por proyecto
- czg — wizard de commits (
bun commit) - lefthook — hooks de Git que se instalan con
bun install - mise-tooling — política de mise.toml y gestión de runtimes