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.
| Comando | Tiempo |
|---|---|
bun hello.js | 5.2ms |
node hello.js | 25.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.
bun run index.jsBun 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.
bun run index.js
bun run index.jsx
bun run index.ts
bun run index.tsxAlternativamente, puedes omitir la palabra clave run y usar el comando "desnudo"; se comporta idénticamente.
bun index.tsx
bun index.js--watch
Para ejecutar un archivo en modo observación, usa la bandera --watch.
bun --watch run index.tsx::: note Cuando uses bun run, coloca las banderas de Bun como --watch inmediatamente después de bun. :::
bun --watch run dev # ✔️ haz esto
bun run dev --watch # ❌ no hagas estoLas 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> :::
bun [banderas de bun] run <script> [banderas del script]Tu package.json puede definir varios "scripts" nombrados que corresponden a comandos de shell.
{
// ... otros campos
"scripts": {
"clean": "rm -rf dist && echo 'Hecho.'",
"dev": "bun server.ts"
}
}Usa bun run <script> para ejecutar estos scripts.
bun run clean
rm -rf dist && echo 'Hecho.'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.
bun run devPara ver una lista de scripts disponibles, ejecuta bun run sin ningún argumento.
bun runscripts de quickstart:
bun run clean
rm -rf dist && echo 'Hecho.'
bun run dev
bun server.ts
2 scriptsBun 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.
#!/usr/bin/env node
// hacer cosasPor 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.
bun run --bun viteFiltrado
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
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.
echo "console.log('Hola')" | bun run -HolaTambién puedes usar bun run - para redirigir archivos a Bun. Por ejemplo, para ejecutar un archivo .js como si fuera un archivo .ts:
echo "console.log!('Esto es TypeScript!' as any)" > secretly-typescript.js
bun run - < secretly-typescript.jsEsto 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.
bun --console-depth 5 run index.tsxEsto 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.
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.
bun --smol run index.tsxEsto 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:
- Scripts de package.json, ej.
bun run build - Archivos fuente, ej.
bun run src/main.js - Binarios de paquetes del proyecto, ej.
bun add eslint && bun run eslint - (solo
bun run) Comandos del sistema, ej.bun run ls