Deno
JavaScript
TypeScript
Runtime
Segurança
Permissões
Deploy
CLI
Modules
Web APIs

Introdução ao Deno: Guia Prático para Desenvolvimento Moderno

Deno, criado por Ryan Dahl (o mesmo criador do Node.js), chegou como uma alternativa segura e moderna ao runtime JavaScript tradicional.

Introdução ao Deno: Guia Prático para Desenvolvimento Moderno

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 lint e deno test vê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ãoDescrição
--allow-readLeitura de arquivos ou diretórios.
--allow-writeEscrita em arquivos ou diretórios.
--allow-netConexões de rede (HTTP, TCP, UDP).
--allow-envAcesso a variáveis de ambiente.
--allow-runExecução de subprocessos.
--allow-ffiInterface 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 ~/.deno e 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 assertEquals da 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/deno simplifica 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 --check garante qualidade.

Boas-práticas de segurança

  1. Mínimo de permissões, conceda apenas o necessário (--allow-read=./data).
  2. Lockfile, use deno lock para fixar versões de módulos.
  3. Auditoria de dependências, verifique URLs externas antes de confiar.
  4. Escaneamento de vulnerabilidades, ferramentas como trivy podem analisar a imagem Docker.

Checklist rápido para iniciar um projeto Deno

  • Instalar Deno (curl ou brew).
  • Criar deno.json com 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