O Node.js pode estar bem estabelecido, mas não se esqueça do Deno, uma estrutura semelhante do mesmo desenvolvedor.
Node.js é uma estrutura de execução longa que permite escrever código do lado do servidor em JavaScript. Lançado originalmente em 2009, o framework teve um crescimento considerável e uma explosão de uso nos últimos anos.
Deno tem diferenças no estilo de formatação, sintaxe de importação e gerenciamento de pacotes, mas o mesmo engenheiro construiu essas estruturas concorrentes no mesmo mecanismo.
Hoje, Deno existe há tempo suficiente para ganhar um lugar nas pilhas de muitos desenvolvedores. Se você deseja iniciar um novo projeto JavaScript, pode se perguntar qual é a escolha certa.
Recursos de nó e deno
Quase nove anos após o lançamento do Node, seu desenvolvedor, Ryan Dahl, anunciou um novo projeto: Deno. Onde o Node já foi a única opção para JavaScript do lado do servidor, o Deno nos deu uma alternativa.
Node.js e Deno são bastante semelhantes em muitos aspectos. A maioria das diferenças entre os dois ocorre sob o capô. Onde o Node é executado no mecanismo JavaScript V8, o Deno é executado sobre um mecanismo personalizado criado em Rust com forte foco no desempenho.
A maioria das principais diferenças entre os dois é baseada em quais recursos cada idioma suporta. Módulos, linting, typescript e gerenciamento de pacotes são todos tratados de forma bastante diferente entre os dois.
Importações de módulo: CommonJS vs. ES
Node.js usa módulos CommonJS por padrão com a sintaxe require(). O Node permite que você altere isso alterando seus arquivos de configuração para usar módulos ECMAScript com a sintaxe import(), se desejar.
// Esta é uma importação de módulo CommonJS válida em Node.js
var _ = exigir("lodash");
// Esta é uma importação de módulo ECMAScript válida em Node.js
importar _ de'lodash';
Há alguma interoperabilidade limitada entre os dois tipos de carregamento do módulo ES com alguns módulos ECMAScript sendo capazes de inclusão usando a sintaxe require(). Cada tipo de importação lida com os módulos de maneira ligeiramente diferente, mas qualquer um deles funcionará na maioria dos casos.
Isso permite que você escolha sua metodologia preferida para incluir módulos externos ao criar um projeto.
Deno adota uma abordagem diferente quando se trata de incluir módulos externos em um projeto. O Deno usa a sintaxe include() para todos os módulos, no entanto, ao contrário da importação do Node, os módulos importados no Deno podem vir de qualquer local. Esses locais podem até incluir redes remotas de entrega de conteúdo (CDNs).
// Esta é uma declaração de importação válida no Deno
importar" https://deno.land/x/[email protected]/dist/lodash.js";
Isso permite que você importe dependências de qualquer local, local ou remoto, oferecendo muito mais flexibilidade. Se você preferir trabalhar com a sintaxe tradicional do Node.js, você pode escrever sua própria função polyfill no Deno como solução alternativa.
Suporte para código TypeScript
O TypeScript tem visto um crescimento crescente em popularidade nos últimos anos, sem sinais de desaceleração tão cedo. Trazer dinâmicas de código seguro para JavaScript provou ser um esforço extremamente bem-sucedido.
Hoje, configurar um novo projeto TypeScript ou converter um projeto Node.js existente para TypeScript é simples, embora um tanto demorado.
Adicionar suporte a TypeScript tornou-se popular o suficiente para que as estruturas mais modernas agora tenham alguma forma de suporte a TypeScript. Angular liderou o caminho, com suporte TypeScript pronto para uso. Hoje mesmo React tem métodos para configurar o suporte TypeScript.
O Deno foi projetado com suporte TypeScript incluído para ajudar a aumentar sua produtividade. Com suporte TypeScript pronto para uso, Deno carece até mesmo da configuração mínima exigida pelo Node.js para definir o desenvolvimento de código JavaScript digitado.
Se você gosta de TypeScript, pode começar de forma rápida e fácil com o suporte do Deno, mas pode sentir falta de algumas das bibliotecas Node.js padrão. Embora o Deno ofereça uma configuração mais rápida, a falta de um ecossistema desenvolvido pode atrapalhar seu processo de construção.
Linting para gerar código mais limpo
Node.js tem uma grande variedade de linters para você escolher. Existem muitas opções bem desenvolvidas que você pode instalar e configurar de forma rápida e fácil. Assim como no caso do TypeScript, no entanto, você precisará fazer um pouco de trabalho braçal para começar com o linter de sua escolha.
Deno tomou uma rota um pouco diferente na formatação de código, vindo com sua própria solução de linting integrada para arquivos .js, .ts e .md. A execução do comando "deno fmt" formatará automaticamente todos os arquivos no diretório de trabalho atual.
Se você não é fã do linter padrão, existe a opção de instalar e executar o sistema de formatação de sua preferência, assim como faria com o Node. A troca de sistemas é simples, pois o linter do Deno é executado por meio de um comando externo e não como parte do pipeline de construção padrão.
Se você está pensando em trocar o linter do Deno por um novo sistema, deve estar ciente dos possíveis problemas de compatibilidade e mantê-los em mente. A maioria dos linters JavaScript exigirá uma instalação do Node para rodar, mesmo que não seja o sistema no qual o projeto que está sendo formatado está rodando.
Gerenciamento de pacotes
O gerenciador de pacotes Node (npm) é muito conhecido entre os desenvolvedores modernos. Com base no sucesso de sistemas semelhantes, como Pip do Python e RubyGems do Ruby, o npm rapidamente ganhou popularidade.
Preocupações persistentes levam ao desenvolvimento de gerentes concorrentes, como pNPm e Yarn. Existem algumas situações em que você pode até optar por instalar e usar vários gerenciadores de pacotes com Node.
Hoje, se você optar por desenvolver em Node.js, terá muitas opções quando se trata de gerenciamento de pacotes. O Node possui um ecossistema próspero com muitas opções de pacotes para instalação. Existem atualmente mais de 1,3 milhão no registro principal do npm.
Npm permite que você publique seus próprios pacotes, levando a uma biblioteca incrivelmente grande.
Deno adotou uma abordagem totalmente diferente para o gerenciamento de pacotes. Não possui, nem requer, um sistema de gerenciamento de pacotes. Em vez disso, o Deno permite a importação direta de bibliotecas externas não apenas do sistema do desenvolvedor, mas de qualquer local que aceite solicitações HTTP.
Isso permite que você importe bibliotecas do repositório do Deno, ou qualquer CDN online, diretamente de sua base de código.
O registro oficial de pacotes do Deno não está totalmente desenvolvido como o do Node, graças à vantagem inicial de quase nove anos do Node. A capacidade de importar bibliotecas de qualquer lugar evita que você sofra as consequências de um ecossistema que ainda não teve a chance de crescer em tamanho real.
Envolvimento da comunidade em Node e Deno
Originalmente lançado em 2009 por Ryan Dahl, o Node teve muito tempo para a comunidade de desenvolvedores se envolver. Com muitos adotantes iniciais e uma biblioteca considerável de pacotes armazenados em seu repositório oficial e à sua disposição, o público teve muito a dizer sobre o crescimento do Node.js.
A plataforma em si é totalmente de código aberto, mantida pela OpenJS Foundation e muitos colaboradores.
O Deno foi lançado em 2018, quase 9 anos após o Node. Foi desenvolvido principalmente por Ryan Dahl para tratar de preocupações e arrependimentos que ele teve com a implementação do Node. Hoje, o Deno também é de código aberto sob a licença do MIT.
Com muitos contribuidores e um repositório próprio em crescimento, o Deno tem visto muito interesse da comunidade.
Preocupações de desempenho das duas estruturas
Para codificadores interessados nas diferenças relativas de desempenho entre os dois frameworks, há pouca diferença entre os dois. O mecanismo personalizado de Deno escrito em Rust sobrepõe uma estrutura central que ainda é o mecanismo V8. Em última análise, Deno e Node são comparáveis em quase todos os casos em termos de desempenho.
Este parece ser o caso independentemente de o código resultante ser executado no servidor ou no cliente. Como os rendimentos de desempenho não são levados em consideração na decisão, você é livre para escolher a estrutura com a qual se sente mais confortável.
Ryan Dahl, o criador de ambos os frameworks, apresentou uma variedade de razões para a criação do Deno. Embora ele tenha mencionado vários fatores, desde a falha em incorporar adequadamente as promessas em muitas APIs ao sistema de compilação escolhido, o desempenho não fazia parte do processo.
Nó x Deno: qual é a escolha certa?
Sob o capô, Node.js e Deno são estruturas notavelmente semelhantes. Ambos executam JavaScript usando o mecanismo V8 com desempenho e recursos semelhantes. Embora existam algumas diferenças na sintaxe, gerenciamento de pacotes e suporte integrado, sua escolha de qual usar é amplamente baseada em sua preferência.
O Node possui um ecossistema incrivelmente grande, mas o Deno permite que você extraia suas dependências de qualquer fonte. Por fim, você precisará examinar de perto seu próprio estilo de desenvolvimento e determinar qual plataforma é mais adequada para você.