Lanzamiento de Deno 2.0 - Gran mejora en compatibilidad con Node.js

2025.12.18

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 permisoDescripción
--allow-netAcceso a red
--allow-readLectura de archivos
--allow-writeEscritura de archivos
--allow-envAcceso a variables de entorno
--allow-runEjecució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ónDeno 2.0Node.js
TypeScriptSoporte nativoRequiere transpilador
SeguridadControl explícito de permisosTodos los permisos por defecto
Gestión de paquetesURL/npm/jsrnpm
Archivos de configuraciónMínimosMuchos necesarios
APIs web estándarSoporte de fetch, etc.Añadido desde v18
EcosistemaEn rápido crecimientoGrande 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