Каковы самые простые подсказки, чтобы узнать, какой из четырех способов сделать надстройку C/C++ nodeJS конкретным примером использования репо?
По-видимому, с годами сложилась ситуация, когда есть три, четыре или пять основных способов написать надстройку nodeJS на C/C++ в зависимости от того, где вы читаете об этом.
Для тех из нас, кто просто пытается изучить и написать наш первый аддон в 2021 году, это может сбить с толку. У меня может быть открыта пара руководств в моем веб-браузере и несколько репозиториев кода, загруженных с GitHub, чтобы увидеть, как работают определенные вещи.
Но если вверху не будет комментария, в котором четко указано, какой из четырех способов используется каждым учебником или репозиторием, это очень сбивает с толку. И имена у каждого из них недостаточно различимы, чтобы помочь вам, когда вы только начинаете.
Итак, что я могу найти, чтобы узнать с первого взгляда, когда я смотрю на код, который использует каждый из этих четырех способов?
Я вижу, что существуют различные основные включаемые файлы, которые могут находиться в верхней части основного исходного файла C/C++, и что есть определенные макросы или вызовы функций с несколько разными именами, которые выполняют одни и те же действия в зависимости от того, каким образом использует аддон.
Это может быть осложнено тем, что некоторые из этих способов либо являются оболочками для других способов, либо иногда требуется вызывать функции более низкого уровня. Я не уверен.
2 ответа
Если вы начинаете разработку нового собственного модуля (или обучаете), лучшим выбором может быть использование N-API (или его класса - оболочки C++ node-addon-api). До прихода N-API, ни один из нативного аддон абстракции API объекта не обеспечивают стабильность ABI через Node.js основных версий . N-API решил эту проблему стабильности ABI и сделал собственный аддон, построенный на одной версии node.js, совместимым с будущей версией node.js. Это означает, что нам не нужно перекомпилировать собственный модуль расширения для всех основных выпусков node.js. N-API поддерживается самой основной командой Node.js, что делает его будущее еще ярче.
Похоже, многие переживают ту же трудность, что и я (когда я начинал изучать собственный аддон Node.JS). Тогда я подумал, что наличие документа, немного объясняющего эволюцию нативных аддонов, может помочь другим, когда они пытаются изучить нативные аддоны; и создал короткую документацию и небольшой набор примеров (которые я создал во время изучения нативного аддона), и он доступен в нативном аддоне Node.
Я также призываю вас всех взглянуть на пример репозитория, созданного командой node.js для нас, я могу счесть это одним из лучших нативного аддона примеровnode-addon-examples .
Я все еще работаю над этим, когда пишу это, поэтому, вероятно, будут вещи, которые я ошибаюсь или упускаю из виду:
1
Краткое имя: (нет)
Длинное имя: (нет)
Часть узла или внешний: часть
Язык: C++
Стабильный: нет
файлов заголовков:
<tcode id="54311462"></tcode>
<tcode id="54311463"></tcode>
<tcode id="54311464"></tcode>
URL документа: https://nodejs.org/api/addons.html
2
Краткое имя: NAN
Длинное имя: Собственные абстракции для узла
Часть узла или внешний: внешний
Язык: C++
Стабильный: нет
Файлы заголовков:
<tcode id="54311465"></tcode>
Макросы:
NODE_MODULE()
Идентификаторы:
Nan::*
URL-адрес репо: https://github.com/nodejs/nan
3
Краткое имя: N-API
Длинное имя: Node-API
Часть узла или внешний: часть
Язык: C
Стабильный: да
Файлы заголовков:
<tcode id="54311468"></tcode>
Макросы:
NAPI_MODULE()
DECLARE_NAPI_METHOD()
Идентификаторы:
napi_*
URL документа: https://nodejs.org/api/n-api.html
4
Краткое имя: node-addon-api
Длинное имя: node-addon-api
Часть узла или внешний: внешний
Язык: C++
Стабильный: да
Файлы заголовков:
<tcode id="54311472"></tcode>
Макросы:
NODE_API_MODULE()
Идентификаторы:
Napi::*
URL-адрес репо: https://github.com/nodejs/node-addon-api
Другой
Краткое имя: node-ffi
Длинное имя: Node.js Интерфейс внешней функции
Часть узла или внешний: внешний
Язык: JavaScript
Стабильный: устаревший
URL-адрес репо: https://github.com/node-ffi/node-ffi