Hace unos cuantos años atras, un entorno de ejecución (runtime environment) que dio de que hablar en el mundo de Javascript, fue Deno. A partir de alli muchos llegaron a creer que Nodejs iba a ser reemplazado por este entorno de ejecución más novedoso.
Obviamente esto no paso. De hecho Deno no esta ni cerca de ser un entorno tan popular como Node, asi que en este artículo me gustaria comentarles porque no pasó esto y porque esto podría cambiar, por lo menos un poco en los proximos meses.
Pero primero para los que no conocen a Deno, veamos de que se trata.
¿Qué es Deno?
En el año 2018, Ryan Dahl, el creador de Nodejs, dio una conferencia en la JSConf , un evento muy popular (en el mundo de Javascript) en el que comentó algunos asuntos relacionados al diseño inicial de Nodejs, y como se arepentia de varios de estos.
Tambien presentó un entorno de ejecución totalmente nuevo y alternativo a Nodejs en el que estaba trabajando, llamado Deno (que es el nombre de Node al reves).
Deno permite hacer lo mismo que Nodejs, es decir ejecutar código de Javascript fuera del navegador, solo que con herramientas y conceptos más modernos.
Por ejemplo:
- Nodejs esta desarrollado encima de modulos de C++, Deno usa Rust.
- Nodejs usa una biblioteca para manejo de código asincrono llamada Livub escrita en C, Deno usa Tokio escrita en Rust.
- Nodejs usa
npm
como una forma de empaquetar código, Deno usa bibliotecas importadas comoURL
, similar al estandar del navegador. De hecho mientras que Node usa CommonJS como forma de importar modulos, Deno usa ES Modules y estandares modernos por defecto. - Nodejs no soporta typescript por defecto, Deno Sí
Por nombrar algunas de sus caracteristica más importantes, porque tambien tiene otras como que, viene con seguridad incluida, Solicitudes de acceso, ademas de su propia herramienta de Linting, y Framework de Testing.
Sin embargo el ser un entorno mucho más moderno y con mejor diseño que Node no bastó para ser su reemplazo. y es que su mayor caracteristica es justamente tambien su mayor debilidad.
Deno no permitia ejecutar modulos de npm, lo que significaba que no se podia utilizar los millones de paquetes de Javascript que todos los proyectos Web llegan a necesitar en un punto. Esto frenó su adopción de golpe, porque la comunidad no se ha movido mucho en este aspecto de reescribir modulos, solo para que tengan un poco mejor de rendimiento. Así que por lo tanto el entorno de ejecución tampoco se volvio muy popular al faltar muchos modulos.
Esto fue asi tambien porque Ryan Dahl, no tenia planeas iniciales de hacer compatible Deno con npm, porque no tendria sentido crear otro entorno de ejecucion que use npm, ya que seria basicamente Node solo que escrito desde cero en Rust.
Pero esto ha cambiado en este ultimo año.
Deno ahora soporta npm
Hace unas cuantas semana los desarrolladores de Deno han anunciado que ahora Deno si soporta modulos de npm, y esta semana que me he dedicado a probarlos, realmente me gusta como funciona.
La idea es muy simple, puedes crear cualquier archivo de Javascript o Typescript y poder importar modulos de npm simplemnee usando la palabra npm al inicio: npm:
Por ejemplo si quieres importar express puedes usar:
import express from 'npm:express'
si quieres importar mongoose:
import mongoose from 'npm:mongoose'
y así con cualquier modulo de npm tecnicamente, aunque hay algunos modulos que aun no estan disponibles debido a que usan caracteristicas de un sistema operativo en especifico, pero el equipo de Deno esta trabajando mucho en soportarlos a todos.
Esta caracteristica simple que parece algo que no importa, de hecho permite que ahora puedas crear las aplicaciones que antes creabas con Nodejs, basicamente cambiando el comando node
por el comando deno
.
Claro hay algunas configuraciones y extensiones que tendras que añadir, pero no es nada complicado.
Esto es similar a otro entorno de ejecución llamado Bun, que tambien se popularizo hace algunos meses atras, que si bien este muchisimo más veloz que Deno, al estar desarrollado tambien desde cero con un lenguaje llamado Zig, usar APIs veloces pero más complejas como Javascript Core, de momento su API es muy inestable, no tiene mucho soporte, y no es practicamente usable de momento.
Ademas aun falta el soporte en Windows y sigue siendo inseguro en comparación a Deno, al permitir cualquier acceso como en Nodejs.
Asi que aun falta esperar a una version más estable para poder considerarlo una opción.
Pero hay algo más que tambien tiene Deno que de momento esta pasando desapercibido para muchos, pero que puede ser una ventaja para sus proximas actualizaciones, este es su servicio llamado Deno Deploy.
Deno Deploy
Como Deno ha sido muy poco usado en comparacion a Node, no hay muchos servicios PaaS (Platform as a Service) de la nube, que te permitan desplegar facilmnente un proyecto.
Claro, puedes pagar un VPS o una nube para desplegar contenedores y usarlo alli, pero aun sigue siendo más trabajo.
Es por esto que muy parte del entorno de ejecución, Deno tambien ofrece como empresa un servicio llamado Deno Deploy, que permite subir aplicaciones creadas en Deno, simplemente seleccionando un Repositorio de Github.
De hecho tambien puedes subir aplicaciones de Frontend creadas con Vitejs. Lo interesante es que este servicio no es solo Deno en la nube sino que es otro Runtime de Deno adaptado en un una Red Distribuida o Red Edge, lo que significa que si subes tu proyecto este automaticamente esta disponible en multiple regiones del mundo.
Y probandolo se pueden desplegar proyectos en Segundos.
Esto seria equivalente a lo que tiene Vercel con Nextjs, es decir Nextjs es un framework, vercel el servicio para subir aplicaciones. es lo mismo aqui.
Aunque lamentablemente como es otro entorno de ejecucion este aun no soporta npm, lo que aun limita un poco el despliegue de aplicaciones creadas en Deno, pero en los proximos meses cuando este disponible, esto puede incrementar mucho la adopcion del entorno de ejecucion.
Es decir en los siguientes meses, podrías crear proyectos de Frontend y Backend desarrollado de la misma forma que lo haces en Node, pero no habria necesidad de usar npm, ya soportaria typescript por defecto y el despleigue seria practicamente instantaneo.
Suena bien, y es algo que estoy esperando para finalmente crear un curso de Deno, y que puedan usarlo en proyectos Reales.
Este servicio ya esta siendo utilizado por empresas como Supabase (Supabase Functions), Slack, y Netlify (Netlify Functions), la mayoria como entorno serverless, es decir para ejecutar código en la nube.
Conclusión
En lo personal aun uso Deno muy poco, en comparacion a Nodejs, he estado haciendo unas pruebas en estas semanas y finalmente veo que el runtime va mejorando en cuanto a su experiencia de Desarrollo, es decir la facilidad con la que se puede crear un proyecto, esta es tambien la razon de porque bun de momento no me parece una opcion fuerte, a pesar de su velocidad. El desarrollar un runtime no es tarea facil, ademas que estan haciendo todo desde cero, lo que va a llevarles más tiempo en mostrar algo concreto, asi que Deno esta más cerca de incrementar su adopcion como alternativa a Nodejs, este ya no esta en Beta de hecho ya va por su version 1.28 al momento de comentarles esto y se puede usar en proyectos de producción, ademas el uso de npm y su soporte completo, será un cambio para bien al runtime.
En fin si quieres probarlo en un proyecto te dejo un tutorial de Deno usando npm para que puedas comprobarlo en la practica y ver que tal.