Deno

> Temas > Deno
Editar

Plataforma de ejecución de Javascript fuera del navegador, en un entorno seguro y con compatibilidad a TypeScript.

Deno es un "runtime" de Javascript y TypeScript que permite ejecutar código en estos lenguajes fuera del contexto del navegador. Por lo tanto, con Deno podemos hacer todo tipo de programas, aunque principalmente se usa para programación del lado del servidor, creación de servicios web y programas de consola.

Deno, al igual que NodeJS, está basado en el motor de ejecución de Javascript V8, el que viene incorporado en el navegador Chrome y además tiene una configuración para interpretar TypeScript muy potente, ya implementada de manera predeterminada, por lo que podemos escribir código TypeScript y ejecutar directamente, sin necesidad de hacer ningún paso en particular. Por supuesto, en un proyecto podemos mezclar módulos escritos con Javascript y TypeScript sin problema alguno.

Deno es una apuesta del mismo creador de NodeJS, para hacer una nueva plataforma de ejecución de Javascript, solucionando todos los problemas históricos de la plataforma NodeJS, por lo que muchos desarrolladores lo han acogido de muy buena manera. Es sin embargo una plataforma relativamente joven, lanzada en 2018, pero que aún tiene camino que recorrer, sobre todo para alcanzar la estela de NodeJS en lo que respecta a paquetes disponibles. No obstante, tiene un futuro muy prometedor.

Más información:

Diferencias entre Deno y NodeJS

Para poder explicar mejor qué es Deno, lo mejor es centrarnos en las diferencias fundamentales con la plataforma Node.

Es más seguro: Cuando ejecutas un programa con Node éste tiene todos permisos para hacer cualquier cosa en tu equipo. Esta situación puede ser problemática porque en la práctica un programa escrito en Node te podría borrar todos los archivos de tu ordenador si quisiera, con lo que un software malicioso podría causar problemas. A veces ha ocurrido que se ha secuestrado un paquete de npm y les han colado una actualización con intención de causar daño y como consecuencia muchos programas se han infectado. Con Deno en cambio el desarrollador es capaz de otorgar solamente los permisos que sean absolutamente necesarios, como conectar por http, escribir solamente en unas carpetas determinadas, etc.

No usa npm: Deno no tiene un gestor de dependencias como tiene NodeJS en npm. En realidad no lo necesita. Todas las dependencias las instala a través de la URL donde está la dependencia en si, por lo que es capaz de funcionar sin depender de un repositorio centralizado. El propio Deno usa un manejador de paquetes interno, que funciona de manera transparente para el desarrollador, que se encarga de optimizar el funcionamiento de las dependencias, descargar o cachear sus archivos, gestionar las versiones, etc. Con todo, consigue aportar sencillez y agilidad para los desarrolladores.

Usa los módulos ES6: en lugar de CommonJS como usa NodeJS, esto lo hace mucho más cercano al estándar de Javascript y permite que el desarrollo de Deno sea más similar todavía a las costumbres de desarrollo que se tienen en los navegadores.

Funciona con promesas: para gestionar los procesos asíncronos, Deno usa promesas en lugar de funciones callback, por lo que el código que se puede realizar es más legible. Además puedes usar await en cualquier punto del código, a cualquier nivel, sin necesidad de declarar una función async, lo que facilita mucho la escritura de programas asíncronos como si fueran perfectamente secuenciales.

Ofrece más soporte a las API web: dispone de manera predeterminada de librerías o APIs del navegador, como fetch, que no están disponibles en Node.

Editar

Instalación de Deno

No existe un instalador de Deno, sino que lo podemos instalar directamente por línea de comandos.

En la página de Deno tienes los comandos para la instalación en todos los sistemas operativos.

Lo más sencillo es usar gestores de paquetes como Homebrew o Chocolatey o directamente descargar el .sh para instalar con Curl y ejecutarlo si estás en Linux.

Una vez instalado podemos comprobar si está funcionando correctamente en el sistema con el comando:

deno --version

Nos informará la versión de Deno que está funcionando, junto con la del motor V8 (de Chrome) y la de TypeScript. La salida será algo parecido a esto:

deno 1.4.6
v8 8.7.220.3
typescript 4.0.3

Editar

Crear un archivo con código y ejecutarlo con Deno

Podemos escribir programas en Deno tanto en archivos .ts como en archivos .js, ya que Deno es capaz de interpretar y ejecutar ambos lenguajes.

Los archivos los podemos colocar en cualquier ruta del disco duro. Por ejemplo, este podría ser el código de un archivo llamado helloworld.ts:

const message = 'Hola mundo'
console.log(message);

Para ejecutarlo lanzamos el comando "deno run" seguido del nombre del archivo que queramos ejecutar, por ejemplo:

deno run helloworld.ts

Editar

Flags de seguridad para la ejecución

Como se ha comentado, Deno ofrece un esquema de seguridad muy útil, que permite limitar las capacidades de los programas que se ejecutan en Deno. De manera predeterminada, los permisos de ejecución son los mínimos posibles, de modo que los programas se puedan correr sin peligro de realizar ninguna acción potencialmente peligrosa.

Por ejemplo, si tenemos este código que hace una soliticud http contra un servidor en un archivo llamado do-fetch.ts:

const response = await fetch('https://jsonplaceholder.typicode.com/todos/1')
const json = await response.json();
console.log(json);

Y lo intentamos ejecutar sin activar ningún flag de seguridad, tal cual:

deno run do-fetch.ts

Obtendremos una respuesta que nos informa que no es posible ejecutar el archivo por permiso denegado:

error: Uncaught PermissionDenied: network access to "https://jsonplaceholder.typicode.com/todos/1", run again with the --allow-net flag

Esto se soluciona, como el mensaje indica, haciendo uso de la bandera --allow-net, con un comando como este:

deno run --allow-net do-fetch.ts

En la documentación de Deno encuentras la lista de permisos que puedes otorgar:

  • --allow-all: Permite todos los permisos.
  • --allow-env: Permite acceso a las variables de entorno.
  • --allow-hrtime: Permite medición de tiempo de alta precisión.
  • --allow-net: Permite el acceso a la red
  • --allow-plugin: Permite la carga de plugins
  • --allow-read: Permite la lectura al sistema de ficheros, pudiendo indicar qué carpeta se desea otorgar permiso, por ejemplo --allow-read=/etc
  • --allow-run: Permite la ejecución de procesos
  • --allow-write: Permite la escritura en el sistema de ficheros, que también permite discriminar por carpeta.

Editar

¿Quieres añadir algo sobre Deno?

Crea artículos, recursos o comparte información sobre Deno

Crear un bloque

Deno

Temas relacionados

Preguntas y respuestas

Se han recibido 1 faqs en Deno

Hacer una pregunta