Deno - The easiest, most secure JavaScript runtime
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));
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.
Todos os exemplos aqui descritos foram retidados da própria documentação