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-appLa 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/snapshotEjemplos 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.tsMejoras 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 | Sí | Sí | Sí |
| Permisos | No | Sí | 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-appTabla 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.

