Есть много причин, по которым нам может понадобиться выполнять проекты cpp из приложения nodejs. Некоторые из них могут быть связаны с производительностью, безопасностью и т. д.

В этом посте я попытаюсь сделать простую демонстрацию того, как мы можем это сделать.

Чтобы этот блог был простым и понятным, я создам проект cpp, который выполняет 4 основные математические операции.

Начальные шаги:

  • Создайте новый проект узла с помощью npm init.
  • Установить пакеты: привязки npm i nan node-addon-api
  • Создайте каталог cpp_source.

Теперь мы создаем консольное приложение C++ в Visual Studio в созданном ранее каталоге cpp_source. Если вам интересно, почему мы создаем консольное приложение, ответ: я хочу видеть результат и иметь возможность запускать проект независимо от приложения nodejs.

Я не буду показывать здесь всю реализацию функций в SimpleMath, вы можете посмотреть их на моем github.

Обратите внимание, что мы выбрасываем исключение в функции разделения, чтобы продемонстрировать, как nodejs будет перехватывать эти исключения.

В качестве следующего шага мы создаем файл wrapper.cpp в каталоге cpp_source. Этот класс предназначен для завершения проекта SimpleMath и его выполнения. Это класс, который свяжет наш проект cpp с nodejs.

На стороне nodejs мы будем вызывать функции выше; складывать, вычитать, умножать и делить. Внутри них мы будем использовать экземпляр SimpleMath. Реализация класса Wrapper будет такой, как показано ниже. В комментариях есть пояснения.

Почти готово :) Кроме того, мы создаем main.cpp внутри каталога cpp_source. Он будет выполнять экспортные операции.

Кроме того, мы создаем binding.gyp, необходимый для операций сборки. Ключевыми моментами здесь являются:

msvs_settings

  • Настройки для компиляции Visual C++.
  • Это эквивалент свойств проекта в Visual Studio.
  • Обычно, когда мы создаем проект в Visual Studio, информация о типе среды выполнения включена по умолчанию. В node-gyp по умолчанию установлено значение false. Вот почему мы должны явно установить для него значение true. Мы делаем это, потому что некоторым библиотекам нужно, чтобы он был установлен в true. Если ваше приложение nodejs, использующее node-addon-api, завершает работу без каких-либо ошибок или исключений, это может быть одной из причин.

определяет

  • _HAS_EXCEPTIONS=1
    Если вы хотите, чтобы ваше приложение nodejs перехватывало исключения, вызванные cpp, вы должны добавить это в раздел defines.

Наконец последний шаг.

В качестве последнего шага мы создаем файл index.js в основном каталоге.

Мы завершили последний шаг, но где SimpleMathNodeAddon.node???

Хорошо, это фактически последний шаг, запустите node-gyp reboot, и все готово.

Вы можете ознакомиться с полным примером на https://github.com/onurpolattimur/node-addon-api-tutorial.

Спасибо за чтение. 🐣