_ _ _ _____ ___ __ __ _(_) | _(_)___ / ( _ ) / /_ ___ ___ _ __ ___ \ \ /\ / / | |/ / | |_ \ / _ \| '_ \ / __/ _ \| '_ ` _ \ \ V V /| | <| |___) | (_) | (_) | (_| (_) | | | | | | \_/\_/ |_|_|\_\_|____/ \___/ \___(_)___\___/|_| |_| |_|
Autor | Ryan Dahl |
Desenvolvedor | Node.js Developers, Linux Foundation |
Lançamento | 27 de maio de 2009 (15 anos) |
Versão estável | 22.9.0 (17 de setembro de 2024) |
Escrito em | C, C++, JavaScript |
Sistema operacional | Linux, Windows, macOS, SmartOS, AIX, FreeBSD |
Gênero(s) | Sistema de tempo de execução |
Licença | MIT |
Estado do desenvolvimento | Ativo |
Página oficial | nodejs |
Repositório | node no GitHub |
Node.js é um software de código aberto, multiplataforma, baseado no interpretador V8 do Google e que permite a execução de códigos JavaScript fora de um navegador web.
A principal característica do Node.js é sua arquitetura assíncrona e orientada por eventos. O runtime do Node.js é single-thread — uma única thread (chamada de Event Loop) é responsável por executar o código Javascript, sem a necessidade de criar novas threads, o que torna o código mais simples de manter. Chamadas que seriam bloqueantes, como entrada/saída, são realizadas de forma assíncrona usando a libuv.
Node.js é usado pela GoDaddy, Groupon, IBM, LinkedIn, Microsoft, Netflix, PayPal, Rakuten, SAP, Voxer, Walmart, e Yahoo!.
Ryan Dahl se inspirou para criar Node.js depois de ver barra de progresso de carga de arquivos no Flickr, ele percebeu que o navegador não sabia o quanto do arquivo foi carregado e tinha que consultar o servidor web.
A principal característica e diferença de outras tecnologias (como PHP, Java, C# e C) é a execução das requisições/eventos em single-thread, onde apenas uma thread (chamada de Event Loop) é responsável por executar o código Javascript, sem a necessidade de criar nova thread que utilizaria mais recursos computacionais (por exemplo memória RAM) e sem o uso da fila de espera.
O gerenciamento dos pacotes é feito através do node package manager (npm), e npx (node package extractor), o npx foi introduzido na versão 5.2.0 do JavaScript, antes deveria ser instalado individualmente. O primeiro tem o propósito de instalar para uso posterior código armazenado num package de nodejs, instalando o software globalmente ou localmente, já o segundo tem o propósito de executar a nível local o código instalado globalmente. Um exemplo disso é o npx create-react-app que tem como propósito instalar em nível local um gabarito (template) vazio de um site de react, pronto a ser usado, através de uma fórmula instalada com npm.
O Node.js possui o gerenciador com inúmeros pacotes e software reusável NPM (Node Package Manager), dando ao interpretador um potencial a ser utilizada em qualquer situação. O pacote mais conhecido é o Express.js, um arcabouço (framework) completo para desenvolvimento de aplicações web.
Um ambiente Node.js não exige muitos recursos computacionais tradicionais. Se utilizado em conjunto com a ferramenta Docker, o ganho na velocidade de deployment e replicação de máquinas pode ser muito significativo e, em ambientes escaláveis, de microsserviços e serverless, representa menos custo e mais eficiência. Um exemplo de uso é uma aplicação de troca de mensagens (conversa, bate-papo ou webchat).
Conta com suporte das principais empresas de serviços de armazenamento na nuvem, como a AWS, Google Cloud e, Microsoft Azure, com suporte nativo ao Node.JS.
O gerenciador NPM fornece pacotes reusáveis disponíveis gratuitamente para uso em grupo;
Mesma linguagem no front end e back end, que pode representar ganhos de reúso de código e criação de equipes multidisciplinares, reaproveitando recursos;
A possibilidade de deployments e iterações mais rápidas, e resolução de problemas on the fly, também permitem a criação de soluções próprias e inovadoras, como a Uber faz para resolver alguns problemas.