Очень просто Native Addons можно рассматривать как код C / C ++, вызываемый из JavaScript.
Они являются мостом между нашим языком программирования приложений JavaScript и собственной средой, полностью написанной на C / C ++.
Они позволяют нам вызывать функции и методы C / C ++ непосредственно из JavaScript.
Одной из наиболее важных экспериментальных функций, объявленных в Node.js 8, был N-API, который направлен на снижение затрат на обслуживание собственных надстроек Node.js.
Он не зависит от базовой среды выполнения JavaScript (например, V8) и поддерживается как часть самого Node.js.
Этот API будет устойчивым к двоичному интерфейсу приложения (ABI) во всех версиях Node.js. Он предназначен для защиты надстроек от изменений в базовом движке JavaScript и позволяет модулям, скомпилированным для одной версии, работать в более поздних версиях Node.js без перекомпиляции.
Аддоны создаются / упаковываются с использованием того же подхода / инструментов, которые описаны в разделе Аддоны C ++. Единственное отличие - это набор API, которые используются в машинном коде. Вместо использования API V8 или Нативных абстракций для Node.js используются функции, доступные в N-API.
Как вы можете понять из документации N-API, он полностью не зависит от движка JavaScript и гарантирует совместимость API и ABI между разными версиями Node.js. Поэтому, если вы переключитесь на другую версию Node.js, вы не должны переустанавливать и перекомпилировать надстройку.
Я был в восторге от N-API, особенно после того, как я следил за докладом, о котором говорилось выше, на Node Interactive 2017.
N-API - API узла нового поколения для собственных модулей
Я обнаружил, что существует C ++ Wrapper для N-API под названием node-addon-api, поэтому я только начал экспериментировать с его использованием и через 4 или 5 дней своего свободного времени портировал bcrypt в N-API.
Я начал изменять файл package.json, в который добавил нужные зависимости, как указано в документации по установке.
Следующим шагом было изменение файла binding.gyp, который содержит все конфигурации сборки для надстройки bcrypt.
В конце концов, надстройка bcrypt состоит из двух частей: одна написана на C ++, а другая - на JavaScript, и, как обычно, часть JavaScript использует собственный код для раскрытия своих функций. Мне не хотелось менять JavaScript API, предоставляемый bcrypt, поэтому я сосредоточился на части C ++ и изменил код, следуя документации node-addon-api.
Я начал переписывать части, отвечающие за создание кодов, которые будут регистрировать модуль с именем «bcrypt_napi», и, кроме того, он будет гарантировать, что функция init будет вызываться, когда потребуется модуль.
bcrypt предоставляет синхронный и асинхронный API, поэтому метод за методом я завершил рефакторинг, и теперь код выглядит так, как указано ниже.
Последним шагом было выполнение всего набора тестов, и, к моему удовольствию, все тесты прошли успешно и выполнялись быстрее, чем надстройка, созданная с использованием NAN. В ближайшие дни я проведу наиболее эффективные тесты производительности, после чего разверну свое первое приложение Node.js, которое будет использовать эту версию bcrypt, так что следите за обновлениями, я сообщу вам очень скоро.
Для большинства из вас, кто хочет начать писать собственные надстройки для Node.js с использованием N-API, я просто перепубликую несколько полезных ресурсов, которые были мне очень полезны: