Зависимости
Есть несколько зависимостей, которые используются Node.js, чтобы работать так, как он работает.
Библиотеки
V8
Библиотека V8 предоставляет для Node.js движок JavaScript, которым Node.js управляет через API C++ V8. V8 поддерживается Google для использования в Chrome.
libuv
Другой важной зависимостью является libuv, библиотека на C, которая используется для абстрагирования неблокирующих операций ввода-вывода в согласованный интерфейс на всех поддерживаемых платформах. Он предоставляет механизмы для обработки файловой системы, DNS, сети, дочерних процессов, каналов, обработки сигналов, опроса и потоковой передачи. Он также включает в себя пул потоков для разгрузки некоторых вещей, которые не могут быть выполнены асинхронно на уровне операционной системы.
llhttp
Синтаксический анализ HTTP выполняется легкой библиотекой C, которая называется llhttp. Он спроектирован таким образом, чтобы не делать никаких системных вызовов или распределений, поэтому занимает требует мало памяти на каждый запрос.
c-ares
Для некоторых асинхронных DNS-запросов Node.js использует библиотеку C под названием c-ares.
Он представлен через модуль DNS в JavaScript как семейство функций resolve()
. Функция lookup()
,
которая используется остальной частью ядра, использует многопоточные вызовы getaddrinfo(3)
в libuv.
Причина этого в том, что c-ares поддерживает /etc/hosts, /etc/resolv.conf и /etc/svc.conf,
но не такие вещи, как mDNS.
OpenSSL
OpenSSL широко используется в модулях tls
и crypto
. Он предоставляет проверенные на практике реализации
многих криптографических функций, которые современные сети используют для обеспечения безопасности.
zlib
Для быстрого сжатия и распаковки Node.js использует стандартную библиотеку zlib, также известную своим использованием в gzip и libpng. Node.js использует zlib для создания интерфейсов синхронизации, асинхронного и потокового сжатия и распаковки.
Инструменты
npm
Node.js ― это модульность, и вместе с этим возникает необходимость в качественном менеджере пакетов и для этого был создан npm. С npm поставляется самый большой выбор пакетов, созданных сообществом, для любой экосистемы программирования, что делает создание приложений Node.js быстрым и простым.
gyp
Системой сборки управляет gyp, генератор проектов на основе Python, скопированный с V8. Он может генерировать файлы проекта для использования на многих платформах. Node.js требует системы сборки, потому что большая его часть и зависимостей написаны на языках, требующих компиляции.
gtest
Нативный код можно протестировать с помощью gtest, который взят из Chromium. Это позволяет тестировать C/C++ без необходимости в существующем исполняемом файле node для начальной загрузки.