На этой странице

Прежде чем начать, убедитесь, что у вас установлены все необходимые пре-реквизиты и инструменты, и прочитайте Анатомию 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

Затем создайте файлы исходников, описанные ниже. Как только проект настроен, проверьте, что всё работает:

hello_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 — хороший ориентир.