Deno, creado por Ryan Dahl (el mismo creador de Node.js), llegó como una alternativa segura y moderna al tiempo de ejecución tradicional de JavaScript. Lanzado en 2020, Deno presenta soporte nativo para TypeScript, un modelo de permisos restrictivos y un conjunto de herramientas integradas (formateador, linter, ejecutor de pruebas).
¿Por qué elegir Deno?
- Seguridad por defecto, el proceso no tiene acceso a archivos, red o entorno sin que el desarrollador lo otorgue explícitamente.
- Soporte nativo para TypeScript, elimina la necesidad de compiladores externos.
- Módulos ES-M, las importaciones a través de URL simplifican la gestión de dependencias.
- Las herramientas integradas,
deno fmt,deno lintydeno testvienen listas para usar, lo que reduce la dependencia de paquetes externos.
Instalación rápida
curl -fsSL https://deno.land/x/install/install.sh | sh ## ou via Homebrew brew install deno
El script agrega el binario a
$PATH.
Estructura de un proyecto Deno
Un proyecto típico de Deno mantiene una organización ajustada. En la raíz están deno.json, que define permisos, opciones de mapa de importación y pelusa, y README.md. El código fuente se encuentra en el directorio src/, con el punto de entrada en main.ts y los módulos auxiliares en archivos como utils.ts. Las pruebas se aíslan en tests/, siguiendo la convención de nombres con sufijo _test.ts, como por ejemplo main_test.ts.
Permisos, el corazón de la seguridad
Al ejecutar un script, debe especificar a qué recursos puede acceder:
| Permiso | Descripción |
|---|---|
--allow-read | Lectura de archivos o directorios. |
--allow-write | Escribir en archivos o directorios. |
--allow-net | Conexiones de red (HTTP, TCP, UDP). |
--allow-env | Acceso a variables de entorno. |
--allow-run | Ejecución de subprocesos. |
--allow-ffi | Interfaz de función externa (C). |
Ejemplo de ejecución segura
deno run --allow-net src/main.ts
El script puede realizar solicitudes HTTP, pero no leer archivos locales.
Módulos ES-M vía URL
Deno te permite importar directamente desde URL públicas:
import { serve } from "https://deno.land/std@0.203.0/http/server.ts";
El módulo se almacena en caché en
~/.denoy se puede versionar mediante etiqueta.
Creando un servidor HTTP simple
import { serve } from "https://deno.land/std@0.203.0/http/server.ts"; const handler = (request: Request): Response => { const url = new URL(request.url); if (url.pathname === "/") { return new Response("Olá Deno!", { status: 200 }); } return new Response("Not Found", { status: 404 }); }; serve(handler, { port: 8000 });
El código anterior crea un servidor que responde
Olá Deno!en la raíz.
Pruebas integradas
Deno incluye un corredor de pruebas liviano:
denon test --allow-net tests/main_test.ts
La prueba puede utilizar
assertEqualsde la biblioteca estándar.
Ejemplo de prueba (3 líneas)
import { assertEquals } from "https://deno.land/std@0.203.0/testing/asserts.ts"; Deno.test("soma", () => assertEquals(2 + 2, 4));
Implementar en producción
- Docker, la imagen oficial
denoland/denosimplifica la implementación.
FROM denoland/deno:alpine-1.38.0 WORKDIR /app COPY . . RUN deno cache src/main.ts EXPOSE 8000 CMD ["run", "--allow-net", "src/main.ts"]
- Edge, Deno Deploy (servicio sin servidor) acepta scripts directamente a través de URL.
- CI/CD, GitHub Actions con
deno lint && deno test && deno fmt --checkgarantiza calidad.
##Buenas prácticas de seguridad
- Permisos mínimos, concede sólo lo necesario (
--allow-read=./data). - Lockfile, use
deno lockpara bloquear las versiones del módulo. - Auditoría de dependencia, verifique las URL externas antes de confiar.
- Escaneo de vulnerabilidades, herramientas como
trivypueden analizar la imagen de Docker.
Lista de verificación rápida para iniciar un proyecto Deno
- [] Instale Deno (rizo o preparación).
- Crear
deno.jsoncon permisos mínimos. - Estructura de directorios (
src,tests). - [] Escribe código usando importaciones a través de URL.
- [] Agregar pruebas unitarias.
- [] Configurar CI (lint, test, fmt).
- Contenedor con Docker o use Deno Deploy.
- [] Revisar los permisos antes de la implementación.
Conclusión
Deno ofrece un entorno seguro, moderno y listo para producción con menos dependencias externas. Al adoptar sus prácticas de permisos restrictivos, módulos ES-M y herramientas integradas, los desarrolladores pueden acelerar la entrega de aplicaciones sólidas y mantener un alto nivel de seguridad.
¿Cuál es tu experiencia con Deno? ¡Comparte en los comentarios!
Lea también
- TypeScript para aplicaciones: Guía de desarrollo de TypeScript
- Trabajadores de Cloudflare: Guía práctica para la informática perimetral sin servidor
- Autorización y Permisos en Aplicaciones: Control de Acceso Seguro
- Autorización y permisos - Fundamentos de mejores prácticas
- TypeScript avanzado: Dominar tipos complejos, genéricos y tipos de utilidad
- Desarrollo web moderno en 2025: tendencias, herramientas y estrategias innovadoras
