O que você precisa saber sobre o Deno!?
Tags: deno, rust, javascript, typescript
Published: 2020-05-25 05:20:02

Bom, como já sabemos e é um assunto muito falado ultimamente, recentemente [fiz uma live falando do Deno](https://www.twitch.tv/videos/630916229) e ele veio ai com a proposta de ser uma nova Runtime de JavaScript assim como o Node, mas com o foco em segurança e performance.

Vamos falar aqui sobre algumas particularidades do Deno e umas perguntas que surgiram como o lançamento da v1.0.

## Uso do ES6

O Deno utiliza o [ES6](http://es6-features.org/) como padrão no desenvolvimento, ou seja não vamos precisar de um babel da vida para transpilar um [Common JS](https://flaviocopes.com/commonjs/) assim como faziamos no NodeJS.

## TypeScript

Como muitos já comentaram o TS á algo nativo no Deno e ainda temos uns problemas de performance por estar usando o transpilador da Microsoft, mas isso ja esta no radar de melhorias com a possível solução de reescrita do transpiler em rust (linguagem padrão do Deno).

## Gerenciamento de Pacotes (Módulos)
Como vocês habitualmente sabem o node tem o NPM para gerenciar seus pacotes e assim ele cria uma pasta no projeto chamada node_modules contendo os pacotes instalados(baixando-os).

No Deno temos duas categorias de pacotes, os nativos chamados de standards ou str e os de terceiros que são chamados de x, e podem ser encontrados com facilidade no site do Deno.

![Site Deno](https://lh3.googleusercontent.com/pw/ACtC-3f21EIm4hdNv_d6ysSyLVo42b1uRgW3g4YZ2g-vHGgv4wWJEbHNfPa_GDRTK9sPB-rZGNl4_52Fvw6GuRedhdACr0319Z-fXI4yIA5_RQtMa-QhDRYKWTnEG5lFQSdUCJYJpVF3gL3hYSMeHeST719w=w3280-h724-no?authuser=0)
 
No Deno isso funciona de uma maneira diferente, pois o Deno baixa o que você precisa em cache em uma única pasta no seu SO.
Mas Diego, que pasta é essa? Pra onde vai esses arquivos? Posso acesssar eles?
-Sim, voce pode acessar esses arquivos e para que voce saiba onde eles estao é somente usar o comando:

`$ deno info `

Com esse comando ele vai trazer pra voce as seguintes informações:

![Deno Info](https://lh3.googleusercontent.com/pw/ACtC-3eG-DrB4louByzsqMDJpLjgWHs3TRYl6ZzQIzmFY1sjyDv6PGifaaQQidjxeHbbu0NVGiDRGgOYsgkOznAb1q7NQtQi1R43RKN-e8aqObtNwR9iCVlh-NUm9AXmVW88jNfywwrnLDWmfsJUHlhtxBz_=w1476-h338-no?authuser=0)
- Diretório do Deno
- Diretório dos seus módulos
- Cache do compilador TypeScript

## Como saber os pacotes instalados na aplicação

Uma coisa que fiquei preocupado era se tinha a existência de um package.json assim como existe no node para sabermos o que tem instalando na nossa aplicação.
E sim, existe a possibilidade de ter um arquivo contendo esses módulos baixados sendo listados.

Para isso precisamos criar um arquivo import_map.json e dentro dele ter a seguinte estrutura:

```javascript 

// import_map.json

{
   "imports": {
      
   }
}

```

Mas além disso precisamos passar uma flag no nosso CLI 
`--importmap=import_map.json` para dizer ao Deno que queremos escrever nesse arquivo como o nome dos pacotes, assim:

`$ deno run --allow-net --importmap=import_map.json --unstable <nome do arquivo_raiz>.ts`, mas na documentação mesmo diz que essa funcionalidade pode não funcionar agora por estar `unstable`.

## Arquitetura do Deno (por baixo dos panos)

O Deno utiliza o [Tokyo](https://tokio.rs) como Run-time para realização dos loops assíncronos de eventos na aplicação, ele é escrito em Rust.

Temos a camada de Recursos com algumas libs [stdio](https://pt.wikipedia.org/wiki/Stdio.h), TCP Socket, child process, entre outros recursos...(Falaremos mais disso em outro momento).

E temos também a camada de comunicação do JS com a [V8](https://v8.dev) e com o C++ sendo diretamente ligada com um modulo isolado de rusty que é o Deno.

![Diagrama de arquitetura](https://deno.land/images/schematic_v0.2.png)

## Por fim, uma demo 

[API usando o Deno](https://github.com/DiegoTeles/deno-api) que criei recentemente em TS para testar o poder da Run-time, ela está salvando os dados em um banco MongoDB e usando a [lib ABC](https://deno.land/x/abc) pra fazer o serviço que o [Express](http://expressjs.com) faz no Node.

 
Por enquanto é isso e nos vemos em breve, dúvidas ou sugestão deixem nos comentários ou nos procure nas redes Sociais!

Acompanhe nossos canais de conteúdo:
- [Youtube](https://www.youtube.com/channel/UCCnvFA6ZShN67V54UsytH0g)
- [Pagina Facebook](https://www.facebook.com/DenoLandBR)
- [Grupo Facebook](https://www.facebook.com/groups/denobr)
- [Discord](https://discord.gg/Z35yKzN)