DEV Community

Cover image for Bem vindo ao Deno
Jonatas Santos for Deno Land Brazil

Posted on • Edited on

Bem vindo ao Deno

Olá meus queridos, sejam todos bem vindos, iremos falar sobre o novo framework Deno.

O que é o Deno?
Deno é um ambiente de execução para JavaScript e TypeScript baseado no V8, engine de JavaScript do Google Chrome e na linguagem de programação Rust. Foi criado por Ryan Dahl, criador original do Node.js, e é focado em segurança e produtividade.

Principais características

  • Seguro por padrão. Sem acesso a arquivos, redes ou ambientes (a menos que seja explicitamente ativado).
  • Possui um runtime TypeScrip Os scripts podem ser agrupados em um único arquivo JavaScript.
  • Construído em Rust (o núcleo do Deno foi escrito em Rust, Node e C++), Tokio (loop de eventos) e V8 (runtime JavaScript)

Deno é mais seguro?
Qualquer código no Node tem o poder de acessar as suas informações como sua rede,HD entre outros. Por outro lado, no Deno o seu código é executado em uma sandbox(semelhante a uma maquina virtual), focado em segurança por padrão.
Ou seja, se você não der permissão, um código malicioso não poderá acessar suas informações. Isso se assemelha ao JavaScript nos navegadores, que só pode acessar câmera se o usuário der permissão.

TypeScript Integrado
O Deno não interpreta apenas JavaScript. Ele também interpreta TypeScript sem que você precise instalar nem configurar nada.

Essa decisão foi baseada no crescimento do uso do TypeScript em grandes projetos que precisam lidar com complexas lógicas de negócio.

Promises em todo lugar
O JavaScript é famoso por sua natureza assíncrona. Porém, o Node foi criado antes do JavaScript possuir coisas como Promises e Async/Await.
Como resultado da evolução do JavaScript em união da linguagem Rust, o Deno tem um moderno sistema baseado em Promises. Isso nos permite trabalhar mais facilmente com código assíncrono, nesse caso todas ações assíncronas retornaram uma Promise.

Preparando o ambiente Windows
Agora vamos a instalação que é bem simples, acesse a Documentação.
Como estou utilizando o Windows, vou instalar via Powershell:

iwr https://deno.land/x/install/install.ps1 -useb | iex
Enter fullscreen mode Exit fullscreen mode

Subindo o Server
No site oficial temos um pequeno trecho de código em TypeScript que nos mostra como é muito simples para subir um pequeno servidor.

// ES Modules
import { serve } from "https://deno.land/std@0.50.0/http/server.ts";

//Cria o Server
const server = serve({ port: 8000 });

console.log("http://localhost:8000/");

//Async iterador para atender solicitações do servidor 
for await (const req of server) {
  req.respond({ body: "<h1>Hello World\n</h1>" });
}
Enter fullscreen mode Exit fullscreen mode

Para executar essa aplicação usamos o comando em nosso terminal
➜ deno run server.ts

Opsss Deu ruim!!!

Isto ocorre porque como comentei acima as medidas de segurança do Deno interferem na execução do nosso arquivo server.ts com a seguinte mensagem:

  Deno deno run server.ts 
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", 
run again with the --allow-net flag
    at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
    at Object.sendSync ($deno$/ops/dispatch_json.ts:72:10)
    at Object.listen ($deno$/ops/net.ts:51:10)
    at listen ($deno$/net.ts:152:22)
    at serve (https://deno.land/std@0.50.0/http/server.ts:261:20)
    at file:///mnt/e/projects/Deno/server.ts:3:16
  Deno
Enter fullscreen mode Exit fullscreen mode

Isso acontece porque por regra de segurança ele nos "força" a conceder o acesso a rede, impedindo que isso aconteça automaticamente como no Node.

Para que esse acesso possa acontecer precisamos incluir a tag --allow-net no nosso comando, passando a ser executado dessa maneira:
➜ deno run --allow-net server.ts
Se tudo ocorreu corretamente ele vai retornar a seguinte mensagem
Compile file:///mnt/e/projects/Deno/server.ts
http://localhost:8000/

Bom este foi um tutorial bem básico do novo framework Deno, para mais informações olhem a Documentação e faça parte do nosso grupo para mais novidades.

Acompanhe nossos canais de conteúdo:

Top comments (0)