Voltar para o Blog

Deno 2.6 Lanca dx: O Novo npx Que Promete Revolucionar Como Executamos Pacotes

Ola HaWkers, o Deno acaba de lancar a versao 2.6 com uma novidade que vai facilitar a vida de muitos desenvolvedores: o comando dx. Se voce ja usou o npx do Node.js, vai entender imediatamente o proposito, mas com alguns diferenciais importantes.

Voce sabia que executar pacotes diretamente do npm ou JSR pode ser muito mais seguro e eficiente? O dx do Deno traz essa experiencia com as garantias de seguranca que o runtime e conhecido.

O Que e o Deno dx

O dx e a resposta do Deno ao npx. Ele permite executar binarios de pacotes npm e JSR sem precisar instala-los globalmente. Mas vai alem: herda todo o modelo de seguranca do Deno.

Comparacao Rapida

npx (Node.js):

  • Baixa e executa pacotes
  • Acesso total ao sistema
  • Sem restricoes de seguranca

dx (Deno):

  • Baixa e executa pacotes
  • Permissoes granulares
  • Seguranca por padrao
# Usando npx (Node.js)
npx create-react-app meu-app

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

A sintaxe e familiar, mas o comportamento por baixo dos panos e diferente.

Como Usar o dx na Pratica

O comando dx funciona tanto com pacotes npm quanto com pacotes JSR (o registry proprio do Deno).

Executando Pacotes npm

# Executar um pacote npm diretamente
deno dx npm:eslint --init

# Executar uma versao especifica
deno dx npm:typescript@5.3.0 --version

# Executar com alias
deno dx npm:prettier --check .

Executando Pacotes JSR

# Executar pacote do JSR
deno dx jsr:@std/cli/parse-args

# Executar ferramenta de teste
deno dx jsr:@std/testing/snapshot

Exemplos Praticos do Dia a Dia

# Iniciar novo projeto Vite
deno dx npm:create-vite@latest meu-projeto

# Rodar o json-server para mock de API
deno dx npm:json-server db.json

# Formatar codigo com Biome
deno dx npm:@biomejs/biome format .

# Gerar documentacao com TypeDoc
deno dx npm:typedoc --entryPoints src/index.ts

Diferenciais de Seguranca

A grande vantagem do dx sobre o npx esta no modelo de seguranca. O Deno nao confia em nenhum codigo por padrao.

Permissoes Granulares

Quando voce executa um pacote com dx, o Deno aplica as mesmas restricoes de qualquer outro codigo:

# Executar com permissao de rede apenas
deno dx --allow-net npm:http-server

# Executar com permissao de leitura em diretorio especifico
deno dx --allow-read=./src npm:eslint ./src

# Executar com permissoes minimas
deno dx --allow-read --allow-write npm:prettier --write .

Comparativo de Seguranca

Aspecto npx dx
Acesso ao filesystem Total Requer permissao
Acesso a rede Total Requer permissao
Variaveis de ambiente Total Requer permissao
Subprocessos Total Requer permissao
FFI Permitido Requer permissao

Cenario de Risco com npx

Imagine que voce executa um pacote malicioso:

# Com npx - pacote tem acesso total
npx pacote-suspeito
# Pode ler SSH keys, enviar para servidor remoto...

# Com dx - sem permissoes, nada acontece
deno dx npm:pacote-suspeito
# Erro: acesso negado

Outras Novidades do Deno 2.6

O lancamento 2.6 trouxe mais do que apenas o dx. Veja outras melhorias significativas:

deno audit

Agora voce pode auditar vulnerabilidades nas dependencias:

# Verificar vulnerabilidades conhecidas
deno audit

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

Permissoes Mais Granulares

O Deno 2.6 introduziu permissoes ainda mais finas:

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

# Permitir rede apenas para dominio especifico
deno run --allow-net="api.exemplo.com" script.ts

Melhorias no TypeScript

A integracao com tsgo (TypeScript em Go) trouxe:

Ganhos de performance:

  • Checagem de tipos 30% mais rapida
  • Menor uso de memoria
  • Hot reload mais responsivo

Stack Traces Melhorados

Agora os erros sao mais legíveis:

# 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)
    ...

# Depois (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

Com tres opcoes no mercado, qual escolher?

Comparativo Completo

Caracteristica npx dx bunx
Velocidade Moderada Alta Muito Alta
Seguranca Baixa Alta Baixa
Compatibilidade npm Total Alta Alta
Cache inteligente Sim Sim Sim
Permissoes Nao Sim Nao

Quando Usar Cada Um

Use npx quando:

  • Precisa de compatibilidade total com ecossistema Node
  • Esta em projeto legado que depende de Node
  • Ferramentas especificas que nao funcionam em Deno

Use dx quando:

  • Seguranca e prioridade
  • Quer consistencia com projetos Deno
  • Precisa de permissoes granulares

Use bunx quando:

  • Velocidade e prioridade absoluta
  • Projetos que ja usam Bun
  • Nao tem restricoes de seguranca

Integracao com Workflows Existentes

O dx se integra bem com ferramentas que voce ja usa.

Scripts no 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 com 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 ferramentas de build
RUN deno dx npm:esbuild --bundle src/index.ts --outfile=dist/bundle.js

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

Migrando do npx Para dx

Se voce quer migrar seus scripts de npx para dx, o processo e simples:

Passo a Passo

1. Identifique os comandos npx no projeto:

# Procurar em package.json e scripts
grep -r "npx " .

2. Substitua npx por deno dx npm:

# Antes
npx eslint .

# Depois
deno dx npm:eslint .

3. Adicione permissoes necessarias:

# Se o comando precisa ler arquivos
deno dx --allow-read npm:eslint .

# Se precisa de rede
deno dx --allow-net npm:create-react-app my-app

Tabela de Conversao Comum

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

Conclusao

O dx do Deno 2.6 representa uma evolucao natural na forma como executamos pacotes JavaScript. Mantendo a familiaridade do npx mas adicionando camadas de seguranca, o Deno oferece uma alternativa madura para desenvolvedores que se preocupam com a integridade de seus sistemas.

Se voce ja usa Deno, o dx e uma adicao natural ao seu workflow. Se ainda esta no ecossistema Node, vale experimentar o dx em projetos novos para sentir os beneficios do modelo de seguranca do Deno.

Se voce quer entender mais sobre as diferencas entre os runtimes JavaScript modernos, recomendo dar uma olhada no artigo Anthropic Compra o Bun onde discutimos as recentes mudancas no mercado de runtimes.

Bora pra cima! 🦅

💻 Domine JavaScript de Verdade

O conhecimento que voce adquiriu neste artigo e so o comeco. Ha tecnicas, padroes e praticas que transformam desenvolvedores iniciantes em profissionais requisitados.

Invista no Seu Futuro

Preparei um material completo para voce dominar JavaScript:

Formas de pagamento:

  • 1x de R$9,90 sem juros
  • ou R$9,90 a vista

📖 Ver Conteudo Completo

Comentários (0)

Esse artigo ainda não possui comentários 😢. Seja o primeiro! 🚀🦅

Adicionar comentário