【HarmonyOS NAPI 深度探索4】安装开发环境(Node.js、C++ 编译器、node-gy
【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
-v
npm -v
应该能看到 Node.js 和 npm 的版本号:
https://i-blog.csdnimg.cn/direct/08d443f1c3ee437085f970871241152e.png
安装 C++ 编译器
Node.js 的原生模块必要用 C++ 编写,因此必须安装一个 C++ 编译器。差别操作系统的安装方式略有差别:
[*] Windows
[*]下载并安装 Microsoft Build Tools,这是 Visual Studio 的轻量版工具集。
[*]在安装过程中,选择“C++ build tools”,并确保安装了“MSBuild”和“Windows SDK”。
[*]安装完成后,运行以下命令检查是否安装成功:cl
假如表现了版本号,你就准备好了。
[*] macOS
[*]macOS 自带 Xcode 工具链,你只必要安装命令行工具即可。运行以下命令安装:xcode-select --install
[*]按提示完成安装后,运行以下命令确认安装成功:cl
ang --version 这次可以看到 Clang 的版本信息
https://i-blog.csdnimg.cn/direct/0c9476e294854de6b031e828f5add0f1.png
[*] Linux
[*]在 Linux 系统中,可以通过包管理器安装 GCC。以 Ubuntu 为例:sudo apt update
sudo apt install build-essential
[*]安装完成后,运行以下命令确认:gcc --version
假如返回版本号,就阐明安装成功。
背面以Mac环境为例,继续介绍后续步骤。
安装 node
-gyp
node
-gyp 是用来构建原生模块的工具,它可以将 C++ 代码编译成可以在 Node.js 中运行的模块。
[*]通过 npm 安装 node
-gyp:npm install -g node
-gyp
https://i-blog.csdnimg.cn/direct/fabd3a94c3494071bd6569b415fde653.png
[*]安装完成后,运行以下命令验证:node
-gyp -v
这时可以看到 node
-gyp 的版本号:
https://i-blog.csdnimg.cn/direct/e0494c1d64b6475495a9ec4fbe7c2d11.png
设置 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
手动设置执行后报错:
https://i-blog.csdnimg.cn/direct/4a45d312a41f472b9dbc245ec208a4c8.png
安装 node
-addon-api
node
-addon-api 是构建 N-API 模块时的核心依靠,用于引用 napi.h。
安装命令:
npm install node
-addon-api
安装后,node
-addon-api 的头文件路径会自动添加到项目的 node
_modules 目录中。
https://i-blog.csdnimg.cn/direct/4bec723e803b486985e33d3be8181c01.png
测试开发环境
我们可以通过一个简单的测试,确保全部工具都正常工作:
[*]创建一个空目录作为测试项目:mkdir napi-test
cd napi-test
[*]初始化项目:npm init -y
[*]创建 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 输出内容:
https://i-blog.csdnimg.cn/direct/9c35496e6248458dbee5387681c7738c.png
构建时报错:
https://i-blog.csdnimg.cn/direct/69df4ecaf02f4154bf9fb5f2f755e0e6.png
找不到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
修改后仍然报错:
https://i-blog.csdnimg.cn/direct/c5f06fb07db14411acef554261f793ad.png
当前编译环境未启用 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
在 Node.js REPL 中运行:const addon = require('./build/Release/testaddon');
console.log(addon.hello());
这里我们看到输出:Hello, World!
https://i-blog.csdnimg.cn/direct/148f6dfd2236466bbc9990d72dd996dc.png
也可以创建一个js文件index.js:
const addon = require('./build/Release/testaddon');
console.log(addon.hello());
执行node
index.js:
https://i-blog.csdnimg.cn/direct/dad5ba34b2334b2cb95381431c0ece54.png
到这里,开发环境就设置完成了。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]