Já ouviu falar no Deno?
Tags: deno, javascript, typescript, node
Published: 2020-05-16 15:15:34

> Deno é um simples, moderno e seguro ambiente de execução de JavaScript e TypeScript que usa a [V8](https://v8.dev) e é feito em Rust. - [Página oficial](https://deno.land)

O runtime foi criado por Ryan Dahl, criador do famoso `Node.js`. Durante sua palestra na JSConf EU 2018, que tinha como título: "10 Coisas Que Lamento Pelo Node.js", ele anunciou o seu novo projeto: o Deno.

Se você conhece o Node, o Deno é praticamente a mesma coisa, só que com algumas melhorias. Ambos possuem a mesma proposta: ser uma plataforma para rodar JavaScript, no caso do Deno TypeScript também, no lado do servidor.

## Principais Características

![Photo by Evgeni Tcherkasski on Unsplash](https://dev-to-uploads.s3.amazonaws.com/i/r5ls5bolutpua472r7do.jpg)

Um dos pontos fortes do Deno é sua prioridade em questão da segurança. Por default, o runtime precisa que as permissões sejam dadas de forma explícitas. O que pode parecer estranho para quem não está acostumado rodar um programa com tantas flags.

Como padrão, o Deno possui um compilador de TypeScript, não sendo necessária nenhuma configuração a mais. Isso traz uma facilidade para a adoção dessa linguagem que sempre requer um trabalho adicional na configuração do ambiente.  

Consigo, o Deno já traz algumas ferramentas padrão. O runtime já vem com uma ferramenta de teste unitário, um formatador de código e uma ferramenta de linting. Não sendo necessário a instalação de ferramentas adicionais para esse tipo de tarefa.

## Breve comparação com o Node

![Photo by James Pond on Unsplash](https://dev-to-uploads.s3.amazonaws.com/i/quwg40pe3yv05d5qy56g.jpg)

O Deno, assim como seu irmão mais velho, utilizam a mesma Engine V8, construída pelo Google e que está presente no Chrome. Além disso, as duas plataformas rodam JavaScript.

As diferenças começam já porque no Deno não existe um package manager, ou seja, nada de npm. As bibliotecas passaram a ser gerenciadas através de URLs ou mesmo caminhos de arquivos. Consequentemente, o Deno não usa um arquivo de configuração, como o package.json, para poder resolver suas dependências.

O novo runtimer utiliza features do EcmaScript mais atual para poder resolver seus pacotes. Para importar uma biblioteca ou mesmo um outro módulo, utilizaremos o `import`.

Outra diferença interessante, é que o Deno precisa de permissões explícitas, o que pode lhe parecer estranho no começo. Portanto, quando o programa que formos executar precisar acessar um arquivo do sistema, variável de ambiente ou mesmo acesso à internet, precisaremos requisitá-las de forma explícita.

## Demo

![Photo by Nicolas Hoizey on Unsplash](https://dev-to-uploads.s3.amazonaws.com/i/xrxz8dny2q0n2lz71mb4.jpg)

Para instalar o Deno é super simples, basta a execução de uma linha de comando:

``` sh
$ curl -fsSL https://deno.land/x/install/install.sh | sh
```

Para saber se está tudo ok rode o `--version`. Se tudo estiver ok, a saída será algo como isso:

```
$ deno --version
deno 1.0.0
v8 8.4.300
typescript 3.9.2
```

O programa mais simples que podemos rodar é o hello world do próprio Deno:

``` sh
$ deno run https://deno.land/std/examples/welcome.ts
Welcome to Deno 🦕
```
E para escrever o nosso é tão simples como o exemplo deles. Primeiro vamos criar um arquivo chamado `index.js` e escrever a seguinte linha de código:

``` js
console.log('hello world, Deno');
```

Então podemos rodar com o seguinte comando:

``` sh
$ deno run index.js
hello world, Deno
```

Simples assim 😎

## Opinião

O Deno trás uma nova alternativa para o tão adotado Node.js. Vejo de certa forma um bom potencial para crescer, principalmente se for bem adotado pela comunidade de TypeScript. Quanto em utilizar em ambiente de produção, acredito que ainda existe um caminho para ser traçado. O runtime ainda precisa conquistar o coração das grande provedores de cloud para poder ser adotado em larga escala.