Skip to main content

Deno - The easiest, most secure JavaScript runtime

· 4 min read
Bruno Carneiro
Fundador da @TautornTech

Deno

Introdução

Em 2020 escrevi um artigo inicial abordando alguns tópicos do Deno, suas vantagens e desvantagens. E de lá pra cá a ferramenta evolui bastante e com isso vou trazer alguns conteúdos abordando o desenvolvimento com Deno. Neste artigo vou apresentar alguns exemplos básicos mas que demonstram a capacidade do Deno.

Instalação

Deno providencia algumas formas de instalação, são elas:

Mac & Linux

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

Windows

choco install deno

Primeiros passos

Deno é uma runtime de JavaScript/TypeScript que tenta ser compatível com browsers modernos, sendo assim um console.log pode ser executado no Deno e em um browser.

function capitalize(word) {
return word.charAt(0).toUpperCase() + word.slice(1);
}

function hello(name) {
return "Hello " + capitalize(name);
}

console.log(hello("john"));
console.log(hello("Sarah"));
console.log(hello("kai"));

hello-world.js

Para executar o arquivo acima digite: deno run hello-world.js

A saída vai ser:

Hello John
Hello Sarah
Hello Kai

O mesmo arquivo pode ser reescrito com TS, uma vez que o Deno traz ele nativamente, sem a necessidade de instalação/configuração.

Dependências

Deno utiliza URL para gerenciamento de dependências. Uma convenção é que todas as URLs de dependências estejam no mesmo local chamado deps.ts. As dependências são exportadas para serem utilizadas em outros locais. E as dev dependencies vão ficar em dev_deps.ts.

É importante que isso é apenas uma convenção, mas pode ser feito da maneira que for melhor para o projeto/time de desenvolvimento.

Exemplo para criar um arquivo para calcular o custo total de uma operação

Primeiro vou criar o arquivo deps.ts, exportando algumas funcionalidades da lib ramda, conforme abaixo:

export {
add,
multiply,
} from "https://x.nest.land/ramda@0.27.0/source/index.js"

Em seguida criei o arquivo arithmetic.ts importando add e multiply do arquivo deps.ts.

import { add, multiply } from "./deps.ts"

function totalCost(outbound: number, inbound: number, tax: number): number {
return multiply(add(outbound, inbound), tax);
}

console.log(totalCost(19, 31, 1.2));
console.log(totalCost(45, 27, 1.15));
Saiba mais em modules

O exemplo acima é bem simples, informo 3 argumentos, outbound, inbound e tax para calcular o custo total de uma operação. Resultado:

/**
* Output
*
* 60
* 82.8
*/

Fetch Data

Assim como nos browsers, o Deno implementa padrões web, com isso é possível realizar um fetch data utilizando a api fetch

/**
* Output: JSON Data
*/
const jsonResponse = await fetch("https://api.github.com/users/denoland");
const jsonData = await jsonResponse.json();
console.log(jsonData);

/**
* Output: HTML Data
*/
const textResponse = await fetch("https://deno.land/");
const textData = await textResponse.text();
console.log(textData);

/**
* Output: Error Message
*/
try {
await fetch("https://does.not.exist/");
} catch (error) {
console.log(error);
}

fetch.ts

Deno por padrão possui uma camada de segurança para controle de IO (input/output), tornando inacessível. Sendo assim, é necessário deixar explícito essa liberação de acesso para o script. Dessa maneira, para executar o script acima é necessário conceder uma permissão de rede --allow-net, dessa maneira posso fazer as requisições http.

Para conhecer mais sobre as permissões do Deno acesse Permissions

Conclusão

Como podem notar, a curva de aprendizado do Deno é muito baixa para quem já conhece JavaScript/TypesScript. Quem trabalha/conhece Node vai notar inúmeras semelhanças, mas as grandes diferenças são principalmente a camada de segurança e a forma de importação de pacotes (sem a instalação, criando um node_modules).

Deno é muito simples e fácil de aprender, esse é só um artigo inicial com algumas funcionalidades e uma primeira visão da ferramenta. É claro que utilizando em produção tudo o que listei aqui expande bastante e é necessário entrar a fundo em muitos outros pontos que nem se quer mencionei aqui.

Mas para este artigo inicial eu quis trazer apenas alguns exemplos e como a ferramenta funciona.

info

Todos os exemplos aqui descritos foram retidados da própria documentação

Referências