Em nosso projeto, o IDE para trabalhar com a API do TestMace , o TypeScript é usado como idioma principal, por isso estamos ativamente interessados em projetos relacionados a esse idioma. Hoje, sua atenção está na tradução de um artigo sobre a ferramenta Deno-runtime para TypeScript (mas esse não é seu único recurso). Boa leitura.

Há cerca de três meses, Ryan Dahl (criador do Node.js.) fez uma apresentação na conferência " 10 coisas que eu sinto muito pelo Node.js.", onde ele falou sobre algumas de suas decisões mal sucedidas de design para o Node.js. Ele dedicou quase metade do seu discurso ao protótipo experimental Deno, cuja tarefa era eliminar as deficiências do Node.js.
Deno já alcançou a versão v0.1 ( nota do tradutor - já v0.3.8 ) e está no caminho certo em direção ao seu objetivo de substituir o Node.js no futuro.
O que há de errado com o Node.js?
Qualquer programa pode gravar dados em um sistema de arquivos ou rede
Isso pode resultar em um risco de segurança, especialmente ao instalar pacotes npm não verificados. Por exemplo, como no incidente crossenv . Se o crossenv não tivesse permissão de gravação, isso não teria acontecido.
APIs assíncronas de partida rápida
As promessas apareceram no Node.js em 2009 e, em fevereiro de 2010, elas se foram. No entanto, a maioria das bibliotecas ainda usa retornos de chamada para trabalhar com código assíncrono.
Sistema de Compilação (GYP)
Montar um módulo para conectar bibliotecas ao C pelo GYP é um tormento. Para obter uma experiência adequada do desenvolvedor, você precisa usar o node-gyp (uma camada no topo do GYP) e, possivelmente, outras camadas (como nan ). Eu, pessoalmente, tentei todas as opções acima em meu pequeno projeto e estou pronto para concordar, isso me fez suar.
Sistema de módulos e npm
O principal problema é que o sistema do módulo não é compatível com os navegadores, o que significa que o código não é completamente isomórfico. Existem principalmente dois motivos para isso: armazenar dependências no node_modules e a presença do package.json.
O que é o Deno?
"Deno é um tempo de execução TypeScript baseado no mecanismo V8"
- Ryan Dahl
Como o Typescript é uma versão estendida do Javascript, o Deno também é um ambiente de tempo de execução para o Javascript.
Deno é um novo projeto de Ryan Dahl (criador do Node.js.) projetado para corrigir os erros de design do Node.js. discutidos acima.
Principais recursos do Deno
Segurança
Por padrão, o Deno proíbe ações confidenciais, como a leitura de variáveis de ambiente ou a gravação no sistema de arquivos.
O processo Deno inicia no modo não privilegiado e, para acessar dados como variáveis de ambiente, devem ser transmitidos sinalizadores especiais.
A permissão para gravar no sistema de arquivos, bem como as permissões relacionadas ao ambiente e à rede, estão desabilitadas. Para ativar essas ações, você deve chamar Deno com os argumentos --allow-write
e --allow-net
.
Toda interação entre o processo privilegiado do Deno e a v8 se resume a mensagens (anteriormente escritas em Go, agora portadas para o Rust). Isso permite que você crie um único ponto para verificar todas as mensagens.
Sistema de módulos
Esqueça package.json e node_modules. Ao importar arquivos de origem, você pode especificar um caminho relativo ou absoluto ou seu URL completo:
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts" import { log } from "./util.ts"
Por padrão, todos os arquivos de origem são armazenados em cache. Você pode usar o argumento --reload para atualizar dependências. Funciona como uma tecla F5 em um navegador.
Suporte TypeScript pronto para uso
O TypeScript é suportado pelo Deno por padrão. Aqui está. Sem buts. Sem configurações.
Deno v0.1.4 em ação
Para começar, baixe o arquivo binário do Deno:
$ mkdir deno-test && cd deno-test $ wget https://github.com/denoland/deno/releases/download/v0.1.4/deno_linux_x64.gz $ gunzip -c deno_linux_x64.gz > deno $ chmod u+x deno $ ./deno --version deno: 0.1.4 v8: 7.0.247-deno
Agora crie um arquivo datilografado e execute-o:
function hello(place: string): string { return `Hello ${place}` } console.log(hello('world'))
$ ./deno myscript.ts Hello world
Você também pode tentar importar via URL. O único requisito é que o arquivo no final da URL tenha uma extensão .ts.
import { factorial } from "https://gist.githubusercontent.com/DanielRamosAcosta/ad514503b1c7cf8290dadb96a5fddee9/raw/4733e267f05d20110ba962c4418bab5e98abfe93/factorial.ts" console.log(factorial(10))
$ ./deno myimport.ts Downloading https://gist.githubusercontent.com/DanielRamosAcosta/ad514503b1c7cf8290dadb96a5fddee9/raw/4733e267f05d20110ba962c4418bab5e98abfe93/factorial.ts 3628800
Durante a execução do script, o módulo será carregado e adicionado ao cache. Para atualizar o cache, você pode chamar Deno usando o argumento --reload, equivalente à ação das teclas F5 ou Ctrl + R.
Abaixo está um exemplo mais complexo usando a biblioteca axios:
import axios from "https://gist.githubusercontent.com/DanielRamosAcosta/2f773d815f5434f185c59aec1bab418c/raw/a442cdd8699e39ab9855cbaa571a79049a7b67d4/axios.ts"
O único problema é que o VSCode não pode carregar digitações remotamente, portanto, o seguinte erro aparecerá no editor:
An import path cannot end with a '.ts' extension.
Mas o código ainda funciona e produz o resultado correto:
./deno --allow-net axios-test.ts User name: Leanne Graham
Conclusão
O Deno precisará de muito tempo para se tornar uma ferramenta de trabalho completa, mas acredito que está se desenvolvendo na direção certa e tem todas as chances de se tornar um tempo de execução Javascript mais elaborado do que o Node.js.
Obrigado pela atenção!