Deno 2.0 Finalmente Lançado
Em outubro de 2024, o Deno 2.0 foi oficialmente lançado. A compatibilidade com Node.js foi significativamente melhorada, aumentando drasticamente sua praticidade. O Deno, que Ryan Dahl criou “aplicando as lições aprendidas com o Node.js”, finalmente se tornou uma opção viável.
O que é Deno: Um runtime JavaScript/TypeScript desenvolvido por Ryan Dahl, criador do Node.js. Suas características incluem segurança, suporte nativo a TypeScript e APIs modernas baseadas em padrões web.
Principais Novas Funcionalidades
1. Compatibilidade Total com npm
Agora é possível usar pacotes npm diretamente. Você pode importar diretamente usando o esquema npm:.
// Importar pacotes npm diretamente
import express from "npm:express@4";
import { z } from "npm:zod";
const app = express();
app.get("/", (req, res) => {
res.json({ message: "Hello from Deno!" });
});
app.listen(3000);
A maioria dos pacotes npm funciona, facilitando a migração do Node.js.
2. Suporte a package.json
Se houver um package.json, você pode usar npm install e node_modules como de costume.
# Executar projeto Node.js existente com Deno
deno run --allow-net --allow-read app.js
# Também é possível executar scripts do package.json
deno task start
3. Introdução de LTS (Long Term Support)
Versões LTS foram introduzidas visando a adoção empresarial. O suporte de longo prazo para versões estáveis torna o uso em produção mais realista.
4. Workspaces e Gerenciamento de Múltiplos Projetos
Suporte para estrutura monorepo. Você pode definir workspaces no deno.json.
// deno.json
{
"workspace": ["./packages/api", "./packages/web", "./packages/shared"]
}
5. Publicação de Pacotes via JSR
O JSR (JavaScript Registry) foi lançado. Você pode publicar TypeScript diretamente e distribuir pacotes que funcionam tanto no npm quanto no Deno.
// Importação do JSR
import { assertEquals } from "jsr:@std/assert";
// Publicar é simples
// deno publish
Modelo de Segurança
O modelo de segurança, uma grande característica do Deno, também evoluiu.
# Permitir explicitamente apenas as permissões necessárias
deno run --allow-net=api.example.com --allow-read=./data app.ts
# Permitir todas as permissões (recomendado apenas para desenvolvimento)
deno run -A app.ts
| Flag de Permissão | Descrição |
|---|---|
--allow-net | Acesso à rede |
--allow-read | Leitura de arquivos |
--allow-write | Escrita de arquivos |
--allow-env | Acesso a variáveis de ambiente |
--allow-run | Execução de subprocessos |
Ferramentas de Desenvolvimento Completas
O Deno 2.0 também melhorou significativamente a experiência de desenvolvimento.
Ferramentas Integradas
# Formatador
deno fmt
# Linter
deno lint
# Executor de testes
deno test
# Benchmark
deno bench
# Geração de documentação
deno doc
# Bundler
deno compile # Gera um único executável
TypeScript Nativo
TypeScript funciona diretamente sem configuração. Não há necessidade de se preocupar com configurações do tsconfig.json.
// app.ts - Pode ser executado diretamente
interface User {
id: number;
name: string;
}
const user: User = { id: 1, name: "Tanaka" };
console.log(user);
Comparação com Node.js
| Funcionalidade | Deno 2.0 | Node.js |
|---|---|---|
| TypeScript | Suporte nativo | Requer transpilador |
| Segurança | Controle explícito de permissões | Todas as permissões por padrão |
| Gerenciamento de pacotes | URL/npm/jsr | npm |
| Arquivos de configuração | Mínimos | Muitos necessários |
| APIs padrão web | Suporte padrão a fetch, etc. | Adicionado a partir da v18 |
| Ecossistema | Em rápido crescimento | Grande e maduro |
Status de Suporte a Frameworks
Status de suporte ao Deno pelos principais frameworks.
- Fresh: Framework full-stack oficial do Deno (Islands Architecture)
- Hono: Framework web de alta velocidade (suporte total ao Deno)
- Oak: Framework de middleware estilo Express
- Express: Funciona via compatibilidade npm
- Next.js: Suporte parcial
// Exemplo com Hono
import { Hono } from "npm:hono";
const app = new Hono();
app.get("/", (c) => c.json({ message: "Hello Hono!" }));
Deno.serve(app.fetch);
Conclusão
O Deno 2.0 se tornou uma opção prática com a grande melhoria na compatibilidade com Node.js. Possui muitas vantagens como segurança, TypeScript nativo e APIs modernas. Vale a pena considerar ativamente para novos projetos ou projetos que priorizam segurança.
← Voltar para a lista