Deno 2.0 finalmente lanzado
En octubre de 2024, Deno 2.0 fue lanzado oficialmente. La compatibilidad con Node.js se ha mejorado significativamente, aumentando drásticamente su practicidad. Deno, que Ryan Dahl creó “aprendiendo de los errores de Node.js”, finalmente se ha convertido en una opción seria.
¿Qué es Deno? Un runtime de JavaScript/TypeScript desarrollado por Ryan Dahl, el creador de Node.js. Se caracteriza por su seguridad, soporte nativo de TypeScript y APIs web modernas.
Nuevas funciones principales
1. Compatibilidad total con npm
Ahora puedes usar paquetes npm directamente. Puedes importarlos usando el esquema npm:.
// Importar paquetes npm directamente
import express from "npm:express@4";
import { z } from "npm:zod";
const app = express();
app.get("/", (req, res) => {
res.json({ message: "Hello from Deno!" });
});
app.listen(3000);
La mayoría de los paquetes npm funcionan, facilitando la migración desde Node.js.
2. Soporte para package.json
Si tienes un package.json, puedes usar npm install y node_modules como siempre.
# Ejecutar un proyecto Node.js existente con Deno
deno run --allow-net --allow-read app.js
# También puedes ejecutar scripts de package.json
deno task start
3. Introducción de LTS (Long Term Support)
Se ha introducido una versión LTS pensando en la adopción empresarial. El soporte a largo plazo de versiones estables hace viable su uso en entornos de producción.
4. Workspaces y gestión de múltiples proyectos
Soporta configuración de monorepo. Puedes definir workspaces en deno.json.
// deno.json
{
"workspace": ["./packages/api", "./packages/web", "./packages/shared"]
}
5. Publicación de paquetes con JSR
Ha aparecido JSR (JavaScript Registry). Puedes publicar TypeScript directamente y distribuir paquetes que funcionen tanto en npm como en Deno.
// Importar desde JSR
import { assertEquals } from "jsr:@std/assert";
// Publicar es fácil
// deno publish
Modelo de seguridad
El modelo de seguridad, una característica distintiva de Deno, también ha evolucionado.
# Permitir explícitamente solo los permisos necesarios
deno run --allow-net=api.example.com --allow-read=./data app.ts
# Permitir todos los permisos (recomendado solo para desarrollo)
deno run -A app.ts
| Flag de permiso | Descripción |
|---|---|
--allow-net | Acceso a red |
--allow-read | Lectura de archivos |
--allow-write | Escritura de archivos |
--allow-env | Acceso a variables de entorno |
--allow-run | Ejecución de subprocesos |
Herramientas de desarrollo completas
Deno 2.0 también mejora significativamente la experiencia de desarrollo.
Herramientas integradas
# Formateador
deno fmt
# Linter
deno lint
# Test runner
deno test
# Benchmark
deno bench
# Generación de documentación
deno doc
# Bundler
deno compile # Genera un ejecutable único
TypeScript nativo
TypeScript funciona directamente sin configuración. No necesitas preocuparte por la configuración de tsconfig.json.
// app.ts - Se puede ejecutar directamente
interface User {
id: number;
name: string;
}
const user: User = { id: 1, name: "Tanaka" };
console.log(user);
Comparación con Node.js
| Función | Deno 2.0 | Node.js |
|---|---|---|
| TypeScript | Soporte nativo | Requiere transpilador |
| Seguridad | Control explícito de permisos | Todos los permisos por defecto |
| Gestión de paquetes | URL/npm/jsr | npm |
| Archivos de configuración | Mínimos | Muchos necesarios |
| APIs web estándar | Soporte de fetch, etc. | Añadido desde v18 |
| Ecosistema | En rápido crecimiento | Grande y maduro |
Estado de compatibilidad con frameworks
Estado de compatibilidad de los principales frameworks con Deno.
- Fresh: Framework full-stack oficial de Deno (Islands Architecture)
- Hono: Framework web de alto rendimiento (totalmente compatible con Deno)
- Oak: Framework de middleware estilo Express
- Express: Funciona con compatibilidad npm
- Next.js: Soporte parcial
// Ejemplo con Hono
import { Hono } from "npm:hono";
const app = new Hono();
app.get("/", (c) => c.json({ message: "Hello Hono!" }));
Deno.serve(app.fetch);
Resumen
Deno 2.0 se ha convertido en una opción práctica gracias a la gran mejora en compatibilidad con Node.js. Tiene muchas ventajas como seguridad, TypeScript nativo y APIs modernas. Vale la pena considerarlo activamente para nuevos proyectos o proyectos que priorizan la seguridad.
← Volver a la lista