Alternativas a NodeJS: Bun y Deno

Dentro del ecosistema Javascript hay un chiste muy recurrente que viene a decir que cada poco tiempo se publica un nuevo framework o librería de Javascript, con lo cual es imposible saber cuántas librerías o frameworks existen en este lenguaje. Desde hace varios años hemos visto cómo hay un interés no sólo en nuevos frameworks, sino también en nuevos entornos de ejecución que aspiran a ser la competencia de NodeJS, el entorno de ejecución más utilizado en el ecosistema Javascript, no sólo para desarrollo backend, sino también para aplicaciones de escritorio.

A día de hoy dos de las alternativas más populares como alternativa a NodeJS son Deno y Bun. Procederemos a explicar primero las características comunes para luego entrar en cada uno en más detalle

¿Qué tienen en común?

Ambos entornos de ejecución comparten las siguientes características:

  • Todo en uno: Ambos tienen linter, formateadores de código, testing… integrados dentro del propio entorno de ejecución, sin necesidad de instalar librerías externas.
  • Soporte nativo de Typescript.
  • APIs Web Standard.

Ambos entornos de ejecución presumen de mejorar la velocidad de ejecución de NodeJS y de ser retrocompatibles con NodeJS y con npm.

Deno

image 4

Deno fue creado en 2018 por Ryan Dahl, el creador de NodeJS, con la idea de mejorar los fallos que, según el propio Dahl, tenía NodeJS y que no había podido corregir cuando lo concibió. Deno está desarrollado usando V8 como motor de Javascript, el lenguaje de programación Rust y el framework Tokio.

Para instalar Deno en nuestro sistema macOs o Linux usaremos el siguiente comando:

NodeJS_comando

Si usamos macOs podemos instalarlo usando Homebrew

NodeJS_Homebrew

Una de las características más significativas de Deno es que es «seguro por defecto». Deno restringe el acceso a aspectos sensibles de la aplicación como el acceso a al sistema de ficheros o a variables de entorno salvo que nosotros le indiquemos lo contrario. Por ejemplo, si queremos dar acceso a red para aceptar conexiones tenemos la opción –allow-net.

NodeJS_allownet

La gestión de dependencias también es una de las características más singulares de Deno: en lugar de un package.json donde se gestionarán todas las dependencias de la aplicación, en Deno las dependencias se gestionan directamente con URLs, permitiendo importar una dependencia con una URL sin tener un directorio node_modules directamente en el fichero que va a utilizar la dependencia.

Esta característica puede generar un problema, y es que si necesitamos esa dependencia en diferentes módulos de la aplicación podemos usar diferentes versiones de una misma dependencia si no tenemos cuidado a la hora de añadirla. Para resolver ese problema se proponen diferentes metodologías, desde crear un fichero aparte con todas las dependencias para tenerlas centralizadas hasta el uso de un fichero de configuración deno.json donde pondremos todos los imports.

nodeJS_imports
NpdeJS_export

Deno es mantenido por la comunidad y es de código abierto. Un ejemplo de un framework que usa Deno como entorno de ejecución es Fresh, un framework web con Server Side Rendering.

Bun

image 5

Diseñado por Jarred Sumner y con la versión 1.0 lanzada el 8 de septiembre de 2023, su principal objetivo es la mejora de los tiempos de ejecución sin la necesidad de aprender nuevas metodologías y usando las APIs habituales del ecosistema Javascript. Está desarrollado en Zig.

Bun se centra en mejorar el rendimiento y la velocidad de ejecución de las aplicaciones manteniendo muchas de las funcionalidades de Node. Módulos de Node como fs, path, o el directorio node_modules para gestionar las dependencias, se pueden seguir utilizando en Bun. Para instalar Bun en macOs o Linux hay que ejecutar el siguiente comando:

NodeJS_bash

Para comprobar que se ha instalado correctamente podemos ejecutar un comando para comprobar la versión actual.

NodeJS_bun

Las dependencias se gestionan de forma muy similar a Node. En lugar de usar npm para gestionar las dependencias, usamos bun directamente. En caso de ser una dependencia de Node se añadirá a node_modules.

NodeJS_bun

Bun soporta tanto CommonJS como ESM para la gestión de módulos, de esta manera podremos importar tanto módulos de NodeJS como de Bun. En este caso vamos a importar Elysia, un framework alternativo a Express que aprovecha las características de Bun.

NodeJS_elysa

Conclusiones

Deno y Bun se presentan como alternativas a Node con el objetivo de mejorar el rendimiento de las aplicaciones así como solucionar problemas de seguridad presentes en NodeJS. La aparición de ambos entornos de ejecución ha generado una gran expectación en el ecosistema Javascript, y si bien estos entornos no están lo suficientemente maduros como para ser utilizados en producción, las características que ofrecen contribuyen a presentar una competencia a NodeJS lo suficientemente interesante como para que NodeJS mejore, así como para cambiar los paradigmas a los que estamos acostumbrados en el ecosistema Javascript.

Backend

Picture of Samuel Sánchez

Samuel Sánchez

Meditación zen como camino a la calma tras desplegar en producción
Picture of Samuel Sánchez

Samuel Sánchez

Meditación zen como camino a la calma tras desplegar en producción

We are HIRING!

What Can We Do