JavaScript es uno de los lenguajes de programación más populares y adoptados del mundo. Impulsa aplicaciones web, aplicaciones móviles, software de escritorio e incluso dispositivos integrados. A pesar de su uso generalizado, no está exento de desafíos. Como todas las tecnologías, JavaScript se enfrenta a problemas relacionados con el rendimiento, la compatibilidad, la seguridad y la complejidad.

Para abordar estos problemas, se han desarrollado varios entornos de ejecución de JavaScript a lo largo de los años. Destacan Node.js y Deno, que aportan soluciones a las limitaciones de JavaScript. Sin embargo, aunque han resuelto muchos problemas, también han introducido otros nuevos, como la necesidad de paquetes innecesarios y un rendimiento de ejecución más lento.

Ahora existe Bun, un entorno de ejecución de JavaScript que existe desde hace tiempo, pero cuyo equipo no ha publicado una versión estable hasta septiembre de 2023. Bun se ha creado para ser una alternativa directa y más eficiente a Node.js.

Este artículo explora Bun, sus características distintivas y cómo integrarlo en tus proyectos de JavaScript.

¿Qué es Bun?

Página principal del sitio web Bun.sh.
Página principal del sitio web Bun.sh.

Bun es un entorno de ejecución de JavaScript escrito principalmente en el lenguaje de programación Zig. Su objetivo es abordar las limitaciones de Node.js al tiempo que proporciona una experiencia de desarrollo más ágil y eficiente.

Sin embargo, Bun no es sólo otro entorno de ejecución de JavaScript como muchos que han surgido a lo largo de los años: Es un conjunto de herramientas todo en uno diseñado para revolucionar la forma en que los desarrolladores trabajan con JavaScript y TypeScript. Al ampliar JavaScriptCore, el motor que impulsa Safari de Apple, Bun permite tiempos de inicio rápidos con un mejor uso de la memoria.

A diferencia de Node.js, Bun no depende de npm ni requiere dependencias externas para funcionar. En su lugar, tiene una librería estándar incorporada, que ofrece funcionalidades para diversos protocolos y módulos, incluyendo variables de entorno, HTTP, WebSocket, sistema de archivos y más.

También ofrece soporte incorporado para TypeScript. Y como Bun transpila internamente cada archivo fuente JavaScript o TypeScript, puedes compilar y ejecutar archivos TypeScript͏ directamente, sin configuración o transpilación adicional.

Bun incluye una potente herramienta de interfaz de línea de comandos (CLI) que te permite run, format, lint, test͏, y bundle tu código utilizando los siguientes comandos sencillos:

  • bun run — ejecuta un archivo JavaScript o TypeScript con Bun.
  • bun test — ejecuta pruebas unitarias con el framework de testin͏g incorporado de Bun.
  • bun fmt — forma͏tea código con el formateador de código incorporado de Bun.
  • bun lint — analiza el código con el analizador de código incorporado de Bun.
  • bun bundle — empaqueta el código con el empaquetador de código incorporado de Bun.

Otra característica destacada de Bun es su función de recarga en caliente, que actualiza los cambios de código sobre la marcha preservando el estado de la aplicación. Se trata de una mejora significativa respecto a Node.js, donde una funcionalidad similar requiere paquetes externos como nodemon o la bandera experimental --watch. En cambio, Bun agiliza este proceso utilizando la función --hot flag.

Más allá de sus ventajas técnicas, Bun cuenta con una creciente comunidad de usuarios que contribuyen activamente a su desarrollo y mejora. Esta vibrante comunidad garantiza que Bun se mantenga actualizado y receptivo, ofreciendo amplios recursos para el aprendizaje y la resolución de problemas.

Principales Características de Bun

Además de la recarga en caliente, la compatibilidad nativa con TypeScript y los tiempos de arranque más rápidos, Bun tiene varias características principales que contribuyen a su popularidad y rendimiento como entorno de ejecución de JavaScript: su empaquetador, su ejecutor de pruebas y su gestor de paquetes. Analicemos estas características en detalle.

Bundler

Un bundler consolida el código JavaScript y sus dependencias en un único archivo͏, optimizando su eficiencia de carga para navegadores o dentro de aplicaciones Node.js. Node.js carece de un bundler͏ nativo, lo que obliga a los desarrolladores a depender de bundlers de terceros como Rollup, Webpack y ͏Parcel cuando manejan código JavaScript.

En cambio, Bun ofrece un bundler incorporado que requiere una configuración mínima y admite diferentes formatos de módulos. También tiene optimizaciones integradas que permiten una agrupación más rápida. Comparativamente, el bundler de Bun supera a los demás, funcionando 1,75 veces más rápido que ͏esbuild, 150 veces más rápido que Parcel, 180 veces más rápido que Rollup + Terser, y 220 veces más rápido que Webpack.

Puedes empaquetar tu proyecto mediante el comando bun bundle ͏<source> --out-dir <directory>. Genera el archivo de salida en el directorio de salida que especifiques:

Código y terminal donde se ha ejecutado el comando de compilación
Empaquetar un proyecto con Bun.

Motor de Pruebas

Las pruebas͏ son una parte inte͏gral del desarrollo de software, ya que garantizan la funcionalidad del código e identifican posibles problemas antes de la producción. Bun también in͏corpora un motor de pruebas en su conjunto de herramientas.

Tra͏dicionalmente, los desarrolladores de Node.js han empleado frameworks de pruebas externos como Jest, que es potente y flexible pero introduce dependencias adicionales y sobrecarga de configuración al proyecto.

Por otro lado, Bun integra su propio motor de pruebas, haciendo hincapié en la velocidad y la compatibilidad. Este enfoque integrado ofrece varias ventajas:

  • Velocidad — Con el motor de pruebas integrado en el tiempo de ejecución, la ejecución de las pruebas se produce directamente sin la sobrecarga de cargar frameworks de pruebas externos. El resultado es una ejecución más rápida de las pruebas, lo que es especialmente beneficioso en grandes bases de código o entornos de integración continua.
  • Compatibilidad — El motor de pruebas integrado funciona a la perfección con las demás funciones de Bun. Aprovecha los rápidos tiempos de arranque de Bun y el uso eficiente de la memoria, garantizando que tus pruebas se ejecuten en un entorno que imita tu entorno de producción.
  • Simplicidad — Con el motor de pruebas incorporado, no tienes que preocuparte de configurar y mantener la compatibilidad entre tu entorno de ejecución y tu framework de pruebas. Puedes escribir pruebas de forma similar al código de la aplicación, utilizando las mismas características del lenguaje y las mismas API.

El motor de pruebas de Bun es totalmente compatible͏ con varios frameworks de pruebas. Ejecutar pruebas es tan sencillo como ejecutar el comando bun test

Además, como Bun soporta TypeScript ͏y JSX de forma nativa, no hay necesidad͏ de configuraciones o ͏plugins adicionales. Puedes centrarte en escribir pruebas de calidad en lugar de configurar el entorno de pruebas.͏

Gestor de Paquetes

El gestor de paquetes compatible con Node.js de Bun es significativamente más rápido que npm, yarn y pnpm. Acelera la velocidad, reduce el uso de disco y minimiza la huella de memoria.

Benchmark de Bun, pnpm, npm y Yarn por el equipo de Bun.
Benchmark de Bun, pnpm, npm y Yarn por el equipo de Bun.

Empleando enlaces simbólicos (symli͏nks), Bun enlaza paquetes͏ para cada proyecto a una ubicación centralizada, eliminando la necesidad de volver a descargar módulos para proyectos posteriores.͏ Aunque el uso de enlaces simbólicos no es totalmente nuevo en los gestores de paquetes, la implementación de Bun supera a las demás.

Cómo Empezar con Bun

Para empezar a utilizar Bun en tu ordenador, instálalo. Hay varios métodos para instalar Bun, incluyendo el uso de un comando cURL, npm o Homebrew. Sin embargo, es crucial tener en cuenta que Bun se utiliza de forma óptima en sistemas macOS o Linux.

Para instalar Bun mediante el comando cURL, ejecuta lo siguiente en tu terminal:

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

Tras una instalación correcta, verifícala ejecutando bun --version en tu terminal. Esto confirma que Bun está listo para su uso.

Ahora, estás preparado para explorar las capacidades de Bun. Puedes utilizar Bun para ejecutar tus proyectos Node.js con el comando bun run. Además, para ejecutar un archivo TypeScript llamado index.ts, utiliza bun run index.ts — Bun transpila tus archivos TypeScript, eliminando la necesidad de paquetes adicionales.

La utilidad de Bun va más allá de estos aspectos básicos. Se integra perfectamente con frameworks JavaScript como React y Next.js. Para profundizar y descubrir más sobre las funcionalidades de Bun, consulta la documentación oficial.

Cómo Ejecutar Proyectos Node.js con Bun

Migrar o ejecutar tus proyectos Node.js con Bun es sencillo, sólo requiere unos pocos comandos de la CLI de Bun. Sigue estos pasos para ejecutar tus proyectos Node.js con Bun:

  1. Primero, instala Bun. Una vez instalado Bun, navega hasta el directorio que contiene los archivos de tu proyecto Node.js (incluido el archivo package.json). Dentro del directorio de trabajo de tu proyecto, ejecuta este comando:
    bun install

    El comando anterior permite a Bun leer el archivo package.json en el directorio de tu proyecto Node.js, revisa el archivo ͏lock.json (si está presente), e instala las dependencias listadas utilizando su gestor de paquetes incorporado.

    Visual Studio Code mostrando la instalación de dependencias
    Instalar dependencias con Bun.

  2. Con las dependencias instaladas, puedes ejecutar tu proyecto con Bun. Utiliza el comando bun run, seguido del archivo de punto de entrada de tu proyecto:
    bun run 

    Por ejemplo, si el punto de entrada de tu proyecto es ͏un archivo llamado͏ index.js, escribe bun run index.͏js .

    Bun ejecuta el código JavaScript o TypeScript en el archivo especificado. Si tu proyecto tiene un script de inicio definido en su archivo package.json, también puedes utilizar bun start para ejecutar tu proyecto.

    Ejecutar el proyecto Bun en Visual Studio Code.
    Ejecutar el proyecto Bun en Visual Studio Code.

La transición a un nuevo entorno de ejecución puede plantear desafíos. Sin embargo, el sólido soporte de Bun para módulos Node.js, el reconocimiento de variables globales y la adherencia al algoritmo de resolución de módulos Node.js facilitan el proceso de migración de Node.js a ͏Bun.

Supón que estás trabajando en un proyecto Node.js que actualmente utiliza el paquete dotenv para gestionar variables de entorno. En este escenario, puedes eliminar con seguridad el paquete dotenv junto con su código de inicialización de tu proyecto. Esto se debe a que Bun tiene una capacidad incorporada para leer automáticamente tus archivos .env, haciendo innecesario el paquete dotenv.

Recuerda que Bun aún está en desarrollo, por lo que es mejor proceder con cautela durante el proceso de migración.

Integrar Bun con el Alojamiento de Aplicaciones de Kinsta

Alojar una aplicación Bun en Kinsta es muy sencillo con el Alojamiento de Aplicaciones de Kinsta utilizando Nixpacks para construir tu proyecto.

Nixpacks, similar a Buildpacks, es un proyecto de código abierto diseñado para crear imágenes contenedoras para aplicaciones basadas en su repositorio. Aprovechando el binario Nix, esta herramienta construye aplicaciones, instala dependencias y configura entornos al desplegarse.

Su arquitectura basada en Rust garantiza tiempos de construcción más rápidos. En particular, Nixpacks destaca sobre Buildpacks al incorporar un sistema de caché integrado, que acelera significativamente las construcciones posteriores a la inicial.

La adopción de Nixpacks por parte de Kinsta subraya su compromiso con la tecnología punta, ofreciendo soluciones más eficientes y flexibles para gestionar imágenes de contenedores y agilizar el proceso de desarrollo.

Para desplegar tu proyecto Bun en el Alojamiento de Aplicaciones de Kinsta, primero envía tu código a un proveedor Git preferido (Bitbucket, GitHub o GitLab). Una vez que tu repositorio esté listo, sigue estos pasos para desplegarlo con Kinsta:

  1. Inicia sesión o crea una cuenta para ver tu panel MyKinsta.
  2. Autoriza a Kinsta con tu proveedor Git.
  3. Haz clic en Aplicaciones en la barra lateral izquierda, y luego en Añadir aplicación.
  4. Selecciona el repositorio y la rama desde la que deseas desplegar.
  5. Asigna un nombre único a tu aplicación y elige la ubicación del centro de datos.
  6. A continuación, configura tu entorno de construcción. Selecciona la configuración Estándar de la máquina de construcción con la opción recomendada Nixpacks.
  7. Utiliza todas las configuraciones por defecto y luego haz clic en Crear aplicación.

El despliegue suele tardar unos minutos y, si se realiza correctamente, recibirás un enlace a tu aplicación junto con un panel de control que contiene información sobre el despliegue.

Kinsta proporciona una infraestructura robusta y fiable para tus aplicaciones. Desplegar tu aplicación Bun directamente en la plataforma de Kinsta es muy sencillo gracias a su interfaz fácil de usar — no se necesita ninguna integración específica. Sólo tienes que subir tu código, configurar los ajustes y tu aplicación estará lista para funcionar.

Resumen

Como entorno de ejecución de JavaScript, Bun ha ganado importancia por varias razones. Diseñado centrándose en el rendimiento y la simplicidad, su objetivo es agilizar el proceso de desarrollo y mejorar la eficiencia general. Su arquitectura modular te permite elegir sólo los componentes que necesitas para proyectos específicos, reduciendo los gastos generales innecesarios.

A diferencia de Node.js, Bun tiene una huella más ligera y tiempos de arranque más rápidos. Esta ventaja es fundamental para las aplicaciones que exigen tiempos de respuesta rápidos y un uso eficiente de los recursos. La simplicidad y el enfoque modular de Bun contribuyen a una experiencia de desarrollo más sencilla y personalizable.

Alojar tus aplicaciones Bun con el servicio de Alojamiento de Aplicaciones de Kinsta ofrece una solución fluida y potente. La sólida infraestructura de Kinsta garantiza un alto rendimiento, con funciones como el escalado automático y la entrega rápida de contenidos.

Elegir Kinsta significa que alojar tus aplicaciones Bun se convierte en una experiencia fiable y eficiente, dándote la libertad de centrarte en construir y optimizar tus proyectos.

¿Qué opinas de Bun? ¿Crees que deberías cambiar todas tus aplicaciones Node.js para utilizar Bun? Comparte tu opinión con nosotros en la sección de comentarios.

Joel Olawanle Kinsta

Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 200 technical articles majorly around JavaScript and it's frameworks.