Есть много причин, по которым нам может понадобиться выполнять проекты 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.
Спасибо за чтение. 🐣