Deno es un runtime multi-plataforma para JavaScript y TypeScript que se basa en el motor V8 de Chrome, creado por Ryan Dahl, también conocido por la creación de una pequeña cosa llamada NodeJS, y está construido en Rust haciendo uso de librerías como Tokio, utilizada para el Event Loop de Deno.
Deno salió a la luz en el año 2018 cuando Ryan dio una charla en la que mencionó las 10 cosas principales que pensó que estaban mal conNodeJS, y al final de esa presentación, dio a conocer Deno, en ese entonces era solo un pequeño proyecto en el que estaba trabajando.
En 2020, ha sido cuando Deno fue lanzado de forma oficial, y entre sus principales características destacan:
- Seguro por defecto. Sin acceso a archivos, redes o entornos, a menos que se habilite explícitamente.
- Soporta TypeScript listo para usar.
- Envía solo un archivo ejecutable.
- Tiene utilidades integradas como un inspector de dependencias ( deno info ) y un formateador de código ( deno fmt ).
- Tiene un conjunto de módulos estándar revisados (auditados) que están garantizados para funcionar con Deno: deno.land/std
Seguridad por defecto
Al contrario que NodeJS, que permite acceder a todo (como leer y escribir archivos en el sistema, realizar solicitudes salientes, acceso a variables de entorno, …), Deno usa argumentos de línea de comandos para habilitar o deshabilitar el acceso a las diferentes funciones de seguridad. Esto limita el riesgo de seguridad que tiene NodeJS en este aspecto.
Typescript integrado
No es necesario instalar librerías externas en Deno para usar Typescript, ya está incluido. Además puedes usar tu propio tsconfig.json. Además Deno, por defecto, usa el strict mode, por lo que cualquier práctica de programación no aconsejada será advertida de inmediato.
Sin NPM ni node_modules
En Deno se ha decidido prescindir de los paquetes npm. Deno utiliza el sistema de módulos de ECMAScript y, como los navegadores, carga los módulos por url. Mediante el uso de URL, los paquetes de Deno se pueden distribuir sin usar un registro central como NPM. De esta forma, tenemos un sistema completamente descentralizado y cualquier desarrollador puede alojar su módulo donde quiera.
De hecho, el archivo package.json también falta. La gestión de dependencias ahora se simplifica al tener una lista de módulos y sus respectivas URL en un archivo llamado deps.ts. Deno cargará todos los módulos importados y los almacena en caché y no los volverá a cargar a menos que se le pase el flag –reload.