Прежде чем начать, убедитесь, что у вас установлены все необходимые пре-реквизиты и инструменты, и прочитайте Анатомию Node-API-проекта, чтобы понять общую структуру и файлы конфигурации, общие для всех проектов на node-addon-api.
Этот туториал использует node-addon-api на уровне C++-обёртки.
Самый быстрый способ получить рабочий проект — скопировать пример Hello World из репозитория node-addon-examples:
git clone https://github.com/nodejs/node-addon-examples.git
cp -r node-addon-examples/src/1-getting-started/a-first-project/node-addon-api hello-world
cd hello-world
npm installКак вариант, настройте проект вручную:
mkdir hello-world
cd hello-world
npm init -y
npm install node-addon-apiЗатем создайте файлы исходников, описанные ниже. Как только проект настроен, проверьте, что всё работает:
npm testhello_world.cc — пожалуй, простейший полезный Node-API-файл, который можно написать.
Файл определяет C++-функцию Method, принимающую единственный аргумент Napi::CallbackInfo&. Этот объект info даёт доступ к окружению JavaScript, включая любые аргументы, переданные из JavaScript.
infoведёт себя как массив аргументов JavaScript.
Method использует info, чтобы получить Napi::Env, затем создаёт и возвращает Napi::String со значением "world".
Функция Init регистрирует единственный экспорт этого модуля: имя "HelloWorld" сопоставляется функции Method.
Макрос NODE_API_MODULE внизу гарантирует, что Init вызывается при загрузке модуля.
binding.js загружает скомпилированный бинарник и реэкспортирует его содержимое. Единственный экспорт из бинарника — функция HelloWorld.
test_binding.js использует require, чтобы загрузить функцию HelloWorld из binding.js. Функция testBasic вызывает её и проверяет результат.
Этот проект демонстрирует минимальный модуль Node-API, экспортирующий одну функцию. Вот что можно попробовать дальше:
- Запустите
test_binding.jsв отладчике. Пройдитесь по коду пошагово и понаблюдайте, какую видимость вы имеете в JavaScript-объект, созданный C++-кодом. - Измените
test_binding.js, чтобы подключать скомпилированный бинарник напрямую, вместо того чтобы идти черезbinding.js. Пройдитесь пошагово в отладчике и отметьте разницу. - Измените
hello_world.cc, чтобы читать аргументы, переданные из JavaScript. Примерыnode-addon-api— хороший ориентир.