Volver al blog

Deno 2.6 Lanza dx: El Nuevo npx Que Promete Revolucionar Cómo Ejecutamos Paquetes

Hola HaWkers, Deno acaba de lanzar la versión 2.6 con una novedad que va a facilitar la vida de muchos desarrolladores: el comando dx. Si ya usaste el npx de Node.js, vas a entender inmediatamente el propósito, pero con algunos diferenciales importantes.

¿Sabías que ejecutar paquetes directamente del npm o JSR puede ser mucho más seguro y eficiente? El dx de Deno trae esa experiencia con las garantías de seguridad que el runtime es conocido.

Qué Es el Deno dx

El dx es la respuesta del Deno al npx. Permite ejecutar binarios de paquetes npm y JSR sin necesitar instalarlos globalmente. Pero va más allá: hereda todo el modelo de seguridad del Deno.

Comparación Rápida

npx (Node.js):

  • Baja y ejecuta paquetes
  • Acceso total al sistema
  • Sin restricciones de seguridad

dx (Deno):

  • Baja y ejecuta paquetes
  • Permisos granulares
  • Seguridad por defecto
# Usando npx (Node.js)
npx create-react-app mi-app

# Usando dx (Deno)
deno dx create-react-app mi-app

La sintaxis es familiar, pero el comportamiento por debajo de los capós es diferente.

Cómo Usar el dx en la Práctica

El comando dx funciona tanto con paquetes npm cuanto con paquetes JSR (el registry propio del Deno).

Ejecutando Paquetes npm

# Ejecutar un paquete npm directamente
deno dx npm:eslint --init

# Ejecutar una versión específica
deno dx npm:typescript@5.3.0 --version

# Ejecutar con alias
deno dx npm:prettier --check .

Ejecutando Paquetes JSR

# Ejecutar paquete del JSR
deno dx jsr:@std/cli/parse-args

# Ejecutar herramienta de test
deno dx jsr:@std/testing/snapshot

Ejemplos Prácticos del Día a Día

# Iniciar nuevo proyecto Vite
deno dx npm:create-vite@latest mi-proyecto

# Correr el json-server para mock de API
deno dx npm:json-server db.json

# Formatear código con Biome
deno dx npm:@biomejs/biome format .

# Generar documentación con TypeDoc
deno dx npm:typedoc --entryPoints src/index.ts

Diferenciales de Seguridad

La gran ventaja del dx sobre el npx está en el modelo de seguridad. Deno no confía en ningún código por defecto.

Permisos Granulares

Cuando ejecutas un paquete con dx, Deno aplica las mismas restricciones de cualquier otro código:

# Ejecutar con permiso de red apenas
deno dx --allow-net npm:http-server

# Ejecutar con permiso de lectura en directorio específico
deno dx --allow-read=./src npm:eslint ./src

# Ejecutar con permisos mínimos
deno dx --allow-read --allow-write npm:prettier --write .

Comparativo de Seguridad

Aspecto npx dx
Acceso al filesystem Total Requiere permiso
Acceso a red Total Requiere permiso
Variables de ambiente Total Requiere permiso
Subprocesos Total Requiere permiso
FFI Permitido Requiere permiso

Escenario de Riesgo con npx

Imagina que ejecutas un paquete malicioso:

# Con npx - paquete tiene acceso total
npx paquete-sospechoso
# Puede leer SSH keys, enviar para servidor remoto...

# Con dx - sin permisos, nada sucede
deno dx npm:paquete-sospechoso
# Error: acceso negado

Otras Novedades del Deno 2.6

El lanzamiento 2.6 trajo más que apenas el dx. Mira otras mejoras significativas:

deno audit

Ahora puedes auditar vulnerabilidades en las dependencias:

# Verificar vulnerabilidades conocidas
deno audit

# Salida ejemplo:
# Found 2 vulnerabilities:
# - lodash@4.17.20: CVE-2021-23337 (high)
# - axios@0.21.0: CVE-2021-3749 (medium)

Permisos Más Granulares

Deno 2.6 introdujo permisos aún más finos:

# Permitir apenas lectura de archivos .json
deno run --allow-read="*.json" script.ts

# Permitir red apenas para dominio específico
deno run --allow-net="api.ejemplo.com" script.ts

Mejoras en TypeScript

La integración con tsgo (TypeScript en Go) trajo:

Ganancias de performance:

  • Chequeo de tipos 30% más rápido
  • Menor uso de memoria
  • Hot reload más responsivo

Stack Traces Mejorados

Ahora los errores son más legibles:

# Antes (Deno 2.5)
Error: Something went wrong
    at Object.runMicrotasks (ext:core/01_core.js:456:11)
    at processTicksAndRejections (ext:deno_node/_next_tick.ts:65:10)
    at async Module._compile (ext:deno_node/module.ts:512:9)
    ...

# Después (Deno 2.6)
Error: Something went wrong
    at fetchData (src/api.ts:15:5)
    at main (src/index.ts:8:3)

dx vs npx vs bunx

Con tres opciones en el mercado, ¿cuál elegir?

Comparativo Completo

Característica npx dx bunx
Velocidad Moderada Alta Muy Alta
Seguridad Baja Alta Baja
Compatibilidad npm Total Alta Alta
Cache inteligente
Permisos No No

Cuándo Usar Cada Uno

Usa npx cuando:

  • Necesitas compatibilidad total con ecosistema Node
  • Estás en proyecto legado que depende de Node
  • Herramientas específicas que no funcionan en Deno

Usa dx cuando:

  • Seguridad es prioridad
  • Quieres consistencia con proyectos Deno
  • Necesitas permisos granulares

Usa bunx cuando:

  • Velocidad es prioridad absoluta
  • Proyectos que ya usan Bun
  • No tienes restricciones de seguridad

Integración con Workflows Existentes

El dx se integra bien con herramientas que ya usas.

Scripts en deno.json

{
  "tasks": {
    "lint": "deno dx npm:eslint src/",
    "format": "deno dx npm:prettier --write .",
    "test:e2e": "deno dx npm:playwright test",
    "docs": "deno dx npm:typedoc --out docs src/"
  }
}

CI/CD con GitHub Actions

name: CI
on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: denoland/setup-deno@v1
        with:
          deno-version: v2.x
      - run: deno dx npm:eslint . --max-warnings 0
      - run: deno dx npm:prettier --check .

Docker

FROM denoland/deno:2.6.0

WORKDIR /app
COPY . .

# Usar dx para herramientas de build
RUN deno dx npm:esbuild --bundle src/index.ts --outfile=dist/bundle.js

CMD ["deno", "run", "--allow-net", "dist/bundle.js"]

Migrando del npx Para dx

Si quieres migrar tus scripts de npx para dx, el proceso es simple:

Paso a Paso

1. Identifica los comandos npx en el proyecto:

# Buscar en package.json y scripts
grep -r "npx " .

2. Sustituye npx por deno dx npm:

# Antes
npx eslint .

# Después
deno dx npm:eslint .

3. Adiciona permisos necesarios:

# Si el comando necesita leer archivos
deno dx --allow-read npm:eslint .

# Si necesita red
deno dx --allow-net npm:create-react-app my-app

Tabla de Conversión Común

Comando npx Comando dx
npx eslint . deno dx --allow-read npm:eslint .
npx prettier --write . deno dx --allow-read --allow-write npm:prettier --write .
npx http-server deno dx --allow-net --allow-read npm:http-server
npx create-vite deno dx --allow-read --allow-write --allow-net npm:create-vite

Conclusión

El dx de Deno 2.6 representa una evolución natural en la forma como ejecutamos paquetes JavaScript. Manteniendo la familiaridad del npx pero adicionando capas de seguridad, Deno ofrece una alternativa madura para desarrolladores que se preocupan con la integridad de sus sistemas.

Si ya usas Deno, el dx es una adición natural a tu workflow. Si aún estás en el ecosistema Node, vale experimentar el dx en proyectos nuevos para sentir los beneficios del modelo de seguridad del Deno.

Si quieres entender más sobre las diferencias entre los runtimes JavaScript modernos, recomiendo dar una mirada en el artículo Anthropic Compra el Bun donde discutimos los recientes cambios en el mercado de runtimes.

¡Vamos a por ello! 🦅

Comentarios (0)

Este artículo aún no tiene comentarios 😢. ¡Sé el primero! 🚀🦅

Añadir comentarios