Dependências

O Node.js precisa de diversas dependências para funcionar do jeito que funciona atualmente.

Bibliotecas

V8

A biblioteca do V8 provê um engine JavaScript para o Node.js, o qual é controlado pela API C++ do próprio V8. O V8 é atualmente mantido pelo Google, por conta de seu uso no navegador Chrome.

libuv

Uma outra dependência importante é a libuv. Uma biblioteca escrita em C que é utilizada para abstrair todas as operações que não bloqueiam o I/O para uma interface consistente por todas as plataformas suportadas. Ela provê mecanismos para lidar com o sistema de arquivos, DNS, rede, processos filhos, pipes, tratamento de sinais, polling e streaming. Ela também inclui uma pool de threads para distribuir o trabalho que não pode ser feito assíncronamente a nível de SO.

llhttp

O parsing do protocolo HTTP é delegado a uma biblioteca leve, escrita em C, chamada llhttp. Ela foi desenhada para não fazer nenhuma syscall ou alocações, portanto acaba possuindo um baixo consumo de memória por requisição.

c-ares

Para algumas requisições assíncronas de DNS, o Node.js utilizar uma biblioteca escrita em C chamada c-ares. Ela é exposta através do módulo de DNS no JavaScript na família resolve() de funções. A função lookup(), que é o que o resto do core do Node.js usa, faz uso de uma chamada getaddrinfo(3) que é processada em threads na libuv. A razão por trás disso é que o c-ares suporta caminhos como /etc/hosts, /etc/resolv.conf e /etc/svc.conf, mas não outras coisas como o mDNS.

OpenSSL

O OpenSSL é extensivamente usado nos módulos tls e crypto do Node.js. Ele provê uma implementação altamente testada de várias funções criptográficas que a web moderna utiliza em grande escala a fim de manter a segurança.

zlib

Para compressões e descompressões rápidas, o Node.js utiliza na biblioteca zlib, que é o padrão da indústria, também conhecida pelo seu uso nas bibliotecas gzip e libpng. O Node.js utiliza o zlib para criar interfaces de descompressão e compressão que podem ser síncronas, assíncronas ou através de streaming.

Ferramentas

npm

Uma das grandes vantagens do Node.js é sua modularidade, e com isso vem a necessidade de um gerenciador de pacotes de qualidade. O NPM foi justamente criado para isto. Com ele, temos a maior seleção de pacotes criados pela comunidade, maior do que em todos os outros ecossistemas existentes. Isto faz com que construir uma aplicação Node.js seja fácil e rápida.

gyp

Todo o sistema de build é gerenciado pelo gyp, um gerador de projetos baseado em python que foi copiado do V8. Ele pode gerar arquivos de projeto para uso em sistemas de build de diversas plataformas. O Node.js precisa disso porque grande parte do próprio Node – e também de suas dependências – são escritas em linguagens que requerem compilação, como C++.

gtest

O código nativo pode ser testado usando gtest, que foi tirado do Chromium. Ele permite testes de C/C++ sem a necessidade de um executável node existente para dar o bootstrap inicial.

Retorne ao começo