Deno, criado por Ryan Dahl (o mesmo criador do Node.js), chegou como uma alternativa segura e moderna ao runtime JavaScript tradicional. Lançado em 2020, o Deno traz suporte nativo a TypeScript, um modelo de permissões restritivo e um conjunto de ferramentas integradas (formatter, linter, test runner).
Por que escolher Deno?
- Segurança por padrão, o processo não tem acesso a arquivos, rede ou ambiente sem que o desenvolvedor conceda explicitamente.
- Suporte nativo a TypeScript, elimina a necessidade de compiladores externos.
- Módulos ES-M, importações via URLs simplificam a gestão de dependências.
- Ferramentas integradas,
deno fmt,deno lintedeno testvêm prontas, reduzindo a dependência de pacotes externos.
Instalação rápida
curl -fsSL https://deno.land/x/install/install.sh | sh ## ou via Homebrew brew install deno
O script adiciona o binário ao
$PATH.
Estrutura de um projeto Deno
Um projeto Deno típico mantém uma organização enxuta. Na raiz ficam o deno.json, que define permissões, import-map e opções de lint, e o README.md. O código-fonte vai sob o diretório src/, com o ponto de entrada em main.ts e os módulos auxiliares em arquivos como utils.ts. Os testes ficam isolados em tests/, seguindo a convenção de nomes com sufixo _test.ts, como main_test.ts.
Permissões, o coração da segurança
Ao executar um script, você deve especificar quais recursos ele pode acessar:
| Permissão | Descrição |
|---|---|
--allow-read | Leitura de arquivos ou diretórios. |
--allow-write | Escrita em arquivos ou diretórios. |
--allow-net | Conexões de rede (HTTP, TCP, UDP). |
--allow-env | Acesso a variáveis de ambiente. |
--allow-run | Execução de subprocessos. |
--allow-ffi | Interface de Função Estrangeira (C). |
Exemplo de execução segura
deno run --allow-net src/main.ts
O script pode fazer requisições HTTP, mas não ler arquivos locais.
Módulos ES-M via URL
Deno permite importar diretamente de URLs públicas:
import { serve } from "https://deno.land/std@0.203.0/http/server.ts";
O módulo é cacheado em
~/.denoe pode ser versionado via tag.
Criando um servidor HTTP simples
import { serve } from "https://deno.land/std@0.203.0/http/server.ts"; const handler = (request: Request): Response => { const url = new URL(request.url); if (url.pathname === "/") { return new Response("Olá Deno!", { status: 200 }); } return new Response("Not Found", { status: 404 }); }; serve(handler, { port: 8000 });
O código acima cria um servidor que responde
Olá Deno!na raiz.
Testes integrados
Deno inclui um runner de testes leve:
denon test --allow-net tests/main_test.ts
O teste pode usar
assertEqualsda biblioteca padrão.
Exemplo de teste (3 linhas)
import { assertEquals } from "https://deno.land/std@0.203.0/testing/asserts.ts"; Deno.test("soma", () => assertEquals(2 + 2, 4));
Deploy em produção
- Docker, imagem oficial
denoland/denosimplifica o deploy.
FROM denoland/deno:alpine-1.38.0 WORKDIR /app COPY . . RUN deno cache src/main.ts EXPOSE 8000 CMD ["run", "--allow-net", "src/main.ts"]
- Edge, Deno Deploy (service serverless) aceita scripts diretamente via URL.
- CI/CD, GitHub Actions com
deno lint && deno test && deno fmt --checkgarante qualidade.
Boas-práticas de segurança
- Mínimo de permissões, conceda apenas o necessário (
--allow-read=./data). - Lockfile, use
deno lockpara fixar versões de módulos. - Auditoria de dependências, verifique URLs externas antes de confiar.
- Escaneamento de vulnerabilidades, ferramentas como
trivypodem analisar a imagem Docker.
Checklist rápido para iniciar um projeto Deno
- Instalar Deno (curl ou brew).
- Criar
deno.jsoncom permissões mínimas. - Estruturar diretórios (
src,tests). - Escrever código usando importações via URL.
- Adicionar testes unitários.
- Configurar CI (lint, test, fmt).
- Containerizar com Docker ou usar Deno Deploy.
- Revisar permissões antes do deploy.
Conclusão
Deno oferece um ambiente seguro, moderno e pronto para produção com menos dependências externas. Ao adotar suas práticas de permissões restritivas, módulos ES-M e ferramentas integradas, desenvolvedores podem acelerar a entrega de aplicações robustas e manter um alto padrão de segurança.
Qual sua experiência com Deno? Compartilhe nos comentários!
Leia também
- TypeScript para Aplicativos: Guia de Desenvolvimento Tipado
- Cloudflare Workers: Guia Prático para Serverless Edge Computing
- Autorização e Permissões em Aplicativos: Controle de Acesso Seguro
- Autorizacao E Permissoes - Melhores Praticas Fundamentos
- TypeScript Avançado: Dominando Tipos Complexos, Generics e Utility Types
- Desenvolvimento Web Moderno em 2025: Tendências, Ferramentas e Estratégias Inovadoras
