Skip to content

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

El Runtime de Bun está diseñado para iniciarse rápido y ejecutarse rápido.

Bajo el capó, Bun usa el motor JavaScriptCore, que es desarrollado por Apple para Safari. En la mayoría de los casos, el rendimiento de inicio y ejecución es más rápido que V8, el motor usado por Node.js y los navegadores basados en Chromium. Su transpilador y runtime están escritos en Zig, un lenguaje moderno y de alto rendimiento. En Linux, esto se traduce en tiempos de inicio 4 veces más rápidos que Node.js.

ComandoTiempo
bun hello.js5.2ms
node hello.js25.1ms

Este benchmark se basa en ejecutar un script simple de Hello World en Linux.

Ejecutar un archivo

Usa bun run para ejecutar un archivo fuente.

bash
bun run index.js

Bun soporta TypeScript y JSX fuera de la caja. Cada archivo es transpilado al vuelo por el rápido transpilador nativo de Bun antes de ser ejecutado.

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

Alternativamente, puedes omitir la palabra clave run y usar el comando "desnudo"; se comporta idénticamente.

bash
bun index.tsx
bun index.js

--watch

Para ejecutar un archivo en modo observación, usa la bandera --watch.

bash
bun --watch run index.tsx

::: note Cuando uses bun run, coloca las banderas de Bun como --watch inmediatamente después de bun. :::

bash
bun --watch run dev # ✔️ haz esto
bun run dev --watch # ❌ no hagas esto

Las banderas que ocurren al final del comando serán ignoradas y pasadas al script "dev" mismo.

Ejecutar un script de package.json

::: note Compara con npm run <script> o yarn <script> :::

sh
bun [banderas de bun] run <script> [banderas del script]

Tu package.json puede definir varios "scripts" nombrados que corresponden a comandos de shell.

json
{
  // ... otros campos
  "scripts": {
    "clean": "rm -rf dist && echo 'Hecho.'",
    "dev": "bun server.ts"
  }
}

Usa bun run <script> para ejecutar estos scripts.

bash
bun run clean
rm -rf dist && echo 'Hecho.'
txt
Limpiando...
Hecho.

Bun ejecuta el comando del script en un subshell. En Linux y macOS, verifica las siguientes shells en orden, usando la primera que encuentra: bash, sh, zsh. En Windows, usa bun shell para soportar sintaxis tipo bash y muchos comandos comunes.

NOTE

⚡️ El tiempo de inicio para `npm run` en Linux es aproximadamente 170ms; con Bun es `6ms`.

Los scripts también se pueden ejecutar con el comando más corto bun <script>, sin embargo, si hay un comando incorporado de bun con el mismo nombre, el comando incorporado tiene precedencia. En este caso, usa el comando más explícito bun run <script> para ejecutar tu script de package.

bash
bun run dev

Para ver una lista de scripts disponibles, ejecuta bun run sin ningún argumento.

bash
bun run
txt
scripts de quickstart:

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

 bun run dev
   bun server.ts

2 scripts

Bun respeta los hooks del ciclo de vida. Por ejemplo, bun run clean ejecutará preclean y postclean, si están definidos. Si el pre<script> falla, Bun no ejecutará el script mismo.

--bun

Es común que los scripts de package.json hagan referencia a CLIs instalados localmente como vite o next. Estos CLIs son a menudo archivos JavaScript marcados con un shebang para indicar que deben ejecutarse con node.

js
#!/usr/bin/env node

// hacer cosas

Por defecto, Bun respeta este shebang y ejecuta el script con node. Sin embargo, puedes anular este comportamiento con la bandera --bun. Para CLIs basados en Node.js, esto ejecutará el CLI con Bun en lugar de Node.js.

bash
bun run --bun vite

Filtrado

En monorepos que contienen múltiples paquetes, puedes usar el argumento --filter para ejecutar scripts en muchos paquetes a la vez.

Usa bun run --filter <patrón_nombre> <script> para ejecutar <script> en todos los paquetes cuyo nombre coincida con <patrón_nombre>. Por ejemplo, si tienes subdirectorios que contienen paquetes llamados foo, bar y baz, ejecutar

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

ejecutará <script> tanto en bar como en baz, pero no en foo.

Encuentra más detalles en la página de documentación para filter.

bun run - para canalizar código desde stdin

bun run - te permite leer JavaScript, TypeScript, TSX o JSX desde stdin y ejecutarlo sin escribir primero en un archivo temporal.

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

También puedes usar bun run - para redirigir archivos a Bun. Por ejemplo, para ejecutar un archivo .js como si fuera un archivo .ts:

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

Por conveniencia, todo el código se trata como TypeScript con soporte JSX cuando se usa bun run -.

bun run --console-depth

Controla la profundidad de inspección de objetos en la salida de consola con la bandera --console-depth.

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

Esto establece qué tan profundamente se muestran los objetos anidados en la salida de console.log(). La profundidad predeterminada es 2. Valores más altos muestran más propiedades anidadas pero pueden producir salida verbosa para objetos complejos.

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

bun run --smol

En entornos con limitaciones de memoria, usa la bandera --smol para reducir el uso de memoria a costa del rendimiento.

bash
bun --smol run index.tsx

Esto hace que el garbage collector se ejecute con más frecuencia, lo que puede ralentizar la ejecución. Sin embargo, puede ser útil en entornos con memoria limitada. Bun ajusta automáticamente el tamaño del heap del garbage collector según la memoria disponible (teniendo en cuenta cgroups y otros límites de memoria) con y sin la bandera --smol, por lo que esto es principalmente útil para casos donde quieres que el tamaño del heap crezca más lentamente.

Orden de resolución

Las rutas absolutas y rutas que comienzan con ./ o .\\ siempre se ejecutan como archivos fuente. A menos que uses bun run, ejecutar un archivo con una extensión permitida preferirá el archivo sobre un script de package.json.

Cuando hay un script de package.json y un archivo con el mismo nombre, bun run prioriza el script de package.json. El orden de resolución completo es:

  1. Scripts de package.json, ej. bun run build
  2. Archivos fuente, ej. bun run src/main.js
  3. Binarios de paquetes del proyecto, ej. bun add eslint && bun run eslint
  4. (solo bun run) Comandos del sistema, ej. bun run ls

Bun por www.bunjs.com.cn editar