【HarmonyOS NAPI 深度探索4】安装开发环境(Node.js、C++ 编译器、node
-gyp)
要使用 N-API 开发原生模块,第一步就是设置好开发环境。固然HarmonyOS Next中提供了DevEco-Studio一站式IDE,可以直接帮助我们完成开发环境的搭建,但是为了更深入的了解NAPI,我们用最原始的编译工具一步一步搭建编译环境。这个可能有点复杂和繁琐,下面我们一步一步来完成。我们必要安装以下工具:
- Node.js:运行时环境
- C++ 编译器:用来编译原生代码
- node
-gyp:构建工具,负责将 C++ 代码编译成可以运行的模块
安装 Node.js
Node.js 是开发 N-API 模块的核心工具。假如你的呆板还没有安装 Node.js,可以按照以下步骤操作:
- 前去 Node.js 官方网站,下载得当你的系统版本的安装包。建议选择 LTS(长期支持)版本,因为它更加稳定。
- 根据安装向导进行安装,并确保在安装时勾选“Add to PATH”选项,这样你可以在命令行直接使用 node
和 npm 命令。
- 安装完成后,打开终端或命令行,运行以下命令确认安装:
应该能看到 Node.js 和 npm 的版本号:
安装 C++ 编译器
Node.js 的原生模块必要用 C++ 编写,因此必须安装一个 C++ 编译器。差别操作系统的安装方式略有差别:
- Windows
- 下载并安装 Microsoft Build Tools,这是 Visual Studio 的轻量版工具集。
- 在安装过程中,选择“C++ build tools”,并确保安装了“MSBuild”和“Windows SDK”。
- 安装完成后,运行以下命令检查是否安装成功:假如表现了版本号,你就准备好了。
- macOS
- macOS 自带 Xcode 工具链,你只必要安装命令行工具即可。运行以下命令安装:
- 按提示完成安装后,运行以下命令确认安装成功:这次可以看到 Clang 的版本信息
- Linux
- 在 Linux 系统中,可以通过包管理器安装 GCC。以 Ubuntu 为例:
- sudo apt update
- sudo apt install build-essential
复制代码 - 安装完成后,运行以下命令确认:假如返回版本号,就阐明安装成功。
背面以Mac环境为例,继续介绍后续步骤。
安装 node
-gyp
node
-gyp 是用来构建原生模块的工具,它可以将 C++ 代码编译成可以在 Node.js 中运行的模块。
- 安装完成后,运行以下命令验证:这时可以看到 node
-gyp 的版本号:
设置 node
-gyp
在使用 node
-gyp 前,必要进行一些额外的设置。
- Windows
- 打开命令行,运行以下命令设置 Python 和 Visual Studio 工具链:
- npm config set python python3
- npm config set msvs_version 2019
复制代码
- macOS 和 Linux
- 大多数情况下,你无需额外设置。假如遇到问题,可以尝试设置 Python 版本:
- npm config set python python3
复制代码
手动设置执行后报错:
安装 node
-addon-api
node
-addon-api 是构建 N-API 模块时的核心依靠,用于引用 napi.h。
安装命令:
- npm install node
- -addon-api
复制代码 安装后,node
-addon-api 的头文件路径会自动添加到项目的 node
_modules 目录中。
测试开发环境
我们可以通过一个简单的测试,确保全部工具都正常工作:
- 创建一个空目录作为测试项目:
- mkdir napi-test
- cd napi-test
复制代码 - 初始化项目:
- 创建 binding.gyp 文件,这是 node
-gyp 的设置文件:- {
- "targets": [
- {
- "target_name": "testaddon",
- "sources": ["testaddon.cc"]
- }
- ]
- }
复制代码 - 创建一个简单的 C++ 文件 testaddon.cc:
- #incl
- ude <napi.h>Napi::String HelloWorld(const Napi::CallbackInfo& info) { return Napi::String::New(info.Env(), "Hello, World!");}Napi::Object Init(Napi::Env env, Napi::Object exports) { exports.Set("hello", Napi::Function::New(env, HelloWorld)); return exports;}NODE_API_MODULE(testaddon, Init)
复制代码 - 使用 node
-gyp 构建模块:- node
- -gyp configure
- node
- -gyp build
复制代码 configure 输出内容:
构建时报错:
找不到napi.h,binding.gyp 的 incl
ude_dirs 设置:
- "incl
- ude_dirs": [ "<!(node
- -p "require('node
- -addon-api').incl
- ude")"]
复制代码 假如动态路径剖析无效,可尝试手动设置路径:
- "incl
- ude_dirs": [ "node
- _modules/node
- -addon-api"]
复制代码 可以运行下面命令验证是否可以精确剖析路径:
- /your_project_path/node
- _modules/node
- -addon-api
复制代码 修改后仍然报错:
当前编译环境未启用 C++ 异常支持,而 node
-addon-api 默认必要支持 C++ 异常,编辑 binding.gyp 文件,在 cflags 和 cflags_cc 中移除或注释掉 -fno-exceptions,或者显式启用异常支持。
- { "targets": [ { "target_name": "testaddon", "sources": ["testaddon.cc"], "incl
- ude_dirs": [ "node
- _modules/node
- -addon-api" ], "cflags": ["-fexceptions"], "cflags_cc": ["-fexceptions"] } ]}
复制代码
- -fexceptions:启用 C++ 异常支持。
- cflags 和 cflags_cc:确保用于编译 C 和 C++ 文件的标志一致。
假如仍然失败,可以通过界说 NODE_ADDON_API_DISABLE_CPP_EXCEPTIONS 来禁用异常支持。
- { "targets": [ { "target_name": "testaddon", "sources": ["testaddon.cc"], "incl
- ude_dirs": [ "node
- _modules/node
- -addon-api" ], "defines": [ "NAPI_VERSION=8", "NODE_ADDON_API_DISABLE_CPP_EXCEPTIONS" ], } ]}
复制代码
- 测试模块:在 Node.js REPL 中运行:
- const addon = require('./build/Release/testaddon');
- console.log(addon.hello());
复制代码 这里我们看到输出:Hello, World!
也可以创建一个js文件index.js:
- const addon = require('./build/Release/testaddon');
- console.log(addon.hello());
复制代码 执行node
index.js:
到这里,开发环境就设置完成了。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |