Залежності
Node.js використовує кілька залежностей, на які використовуються для забезпечення його роботи.
Бібліотеки
V8
Бібліотека V8 надає Node.js JavaScript–рушій, який Node.js керується через V8 C++ API. V8 підтримується Google для використання у Chrome.
libuv
Іншою важливою залежністю є libuv, C–бібліотека, що використовується для абстрагування неблокуючих I/O–операцій у консистентний інтерфейс для всіх платформ, що підтримуються. Вона надає механізм для маніпуляцій файловою системою, DNS, мережею, дочірними процесами, пайпами, сигналами, запитами та потоками. Вона також включає тред для розвантаження роботи, що може бути виконана асинхронно на рівні операційної системи.
llhttp
Парсинг HTTP відбувається з допомогою легкої С–бібліотеки, яка називається 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 (генератор проектів взятий з V8, що написаний на Python). Вона може генерувати файли для проектів,щоб використовувати їх у системах збірки на багатьох платформах. Node.js потребує системи збірки, оскільки велика кількість його частин, його залежності, написані на мовах, що потребують компіляції.
gtest
Нативний код можна тестувати через gtest, який взятий з Chromium. Він дозволяє тестувати C/C++ без потреби у існуючій збірці node.