【HarmonyOS NAPI 深度探索4】安装开发环境(Node.js、C++ 编译器、node-gy ...

打印 上一主题 下一主题

主题 827|帖子 827|积分 2481

【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 命令。
  • 安装完成后,打开终端或命令行,运行以下命令确认安装:
    1. node
    2. -v
    3. npm -v
    复制代码
应该能看到 Node.js 和 npm 的版本号:

安装 C++ 编译器

Node.js 的原生模块必要用 C++ 编写,因此必须安装一个 C++ 编译器。差别操作系统的安装方式略有差别:


  • Windows

    • 下载并安装 Microsoft Build Tools,这是 Visual Studio 的轻量版工具集。
    • 在安装过程中,选择“C++ build tools”,并确保安装了“MSBuild”和“Windows SDK”。
    • 安装完成后,运行以下命令检查是否安装成功:
      1. cl
      复制代码
      假如表现了版本号,你就准备好了。

  • macOS

    • macOS 自带 Xcode 工具链,你只必要安装命令行工具即可。运行以下命令安装:
      1. xcode-select --install
      复制代码
    • 按提示完成安装后,运行以下命令确认安装成功:
      1. cl
      2. ang --version
      复制代码
      这次可以看到 Clang 的版本信息


  • Linux

    • 在 Linux 系统中,可以通过包管理器安装 GCC。以 Ubuntu 为例:
      1. sudo apt update
      2. sudo apt install build-essential
      复制代码
    • 安装完成后,运行以下命令确认:
      1. gcc --version
      复制代码
      假如返回版本号,就阐明安装成功。
      背面以Mac环境为例,继续介绍后续步骤。

安装 node
-gyp


node
-gyp 是用来构建原生模块的工具,它可以将 C++ 代码编译成可以在 Node.js 中运行的模块。

  • 通过 npm 安装 node
    -gyp:
    1. npm install -g node
    2. -gyp
    复制代码


  • 安装完成后,运行以下命令验证:
    1. node
    2. -gyp -v
    复制代码
    这时可以看到 node
    -gyp 的版本号:

设置 node
-gyp


在使用 node
-gyp 前,必要进行一些额外的设置。


  • Windows

    • 打开命令行,运行以下命令设置 Python 和 Visual Studio 工具链:
      1. npm config set python python3
      2. npm config set msvs_version 2019
      复制代码

  • macOS 和 Linux

    • 大多数情况下,你无需额外设置。假如遇到问题,可以尝试设置 Python 版本:
      1. npm config set python python3
      复制代码

手动设置执行后报错:

安装 node
-addon-api


node
-addon-api 是构建 N-API 模块时的核心依靠,用于引用 napi.h。
安装命令:
  1. npm install node
  2. -addon-api
复制代码
安装后,node
-addon-api 的头文件路径会自动添加到项目的 node
_modules 目录中。

测试开发环境

我们可以通过一个简单的测试,确保全部工具都正常工作:

  • 创建一个空目录作为测试项目:
    1. mkdir napi-test
    2. cd napi-test
    复制代码
  • 初始化项目:
    1. npm init -y
    复制代码
  • 创建 binding.gyp 文件,这是 node
    -gyp 的设置文件:
    1. {
    2.   "targets": [
    3.     {
    4.       "target_name": "testaddon",
    5.       "sources": ["testaddon.cc"]
    6.     }
    7.   ]
    8. }
    复制代码
  • 创建一个简单的 C++ 文件 testaddon.cc:
    1. #incl
    2. 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 构建模块:
    1. node
    2. -gyp configure
    3. node
    4. -gyp build
    复制代码
    configure 输出内容:

构建时报错:

找不到napi.h,binding.gyp 的 incl
ude_dirs 设置:
  1. "incl
  2. ude_dirs": [  "<!(node
  3. -p "require('node
  4. -addon-api').incl
  5. ude")"]
复制代码
假如动态路径剖析无效,可尝试手动设置路径:
  1. "incl
  2. ude_dirs": [  "node
  3. _modules/node
  4. -addon-api"]
复制代码
可以运行下面命令验证是否可以精确剖析路径:
  1. /your_project_path/node
  2. _modules/node
  3. -addon-api
复制代码
修改后仍然报错:

当前编译环境未启用 C++ 异常支持,而 node
-addon-api 默认必要支持 C++ 异常,编辑 binding.gyp 文件,在 cflags 和 cflags_cc 中移除或注释掉 -fno-exceptions,或者显式启用异常支持。
  1. {      "targets": [        {          "target_name": "testaddon",          "sources": ["testaddon.cc"],          "incl
  2. ude_dirs": [            "node
  3. _modules/node
  4. -addon-api"          ],              "cflags": ["-fexceptions"],               "cflags_cc": ["-fexceptions"]        }      ]}
复制代码


  • -fexceptions:启用 C++ 异常支持。
  • cflags 和 cflags_cc:确保用于编译 C 和 C++ 文件的标志一致。
    假如仍然失败,可以通过界说 NODE_ADDON_API_DISABLE_CPP_EXCEPTIONS 来禁用异常支持。
  1. {      "targets": [        {          "target_name": "testaddon",          "sources": ["testaddon.cc"],          "incl
  2. ude_dirs": [            "node
  3. _modules/node
  4. -addon-api"          ],          "defines": [              "NAPI_VERSION=8",              "NODE_ADDON_API_DISABLE_CPP_EXCEPTIONS"              ],         }      ]}
复制代码

  • 测试模块:
    1. node
    复制代码
    在 Node.js REPL 中运行:
    1. const addon = require('./build/Release/testaddon');
    2. console.log(addon.hello());
    复制代码
    这里我们看到输出:Hello, World!

也可以创建一个js文件index.js:
  1. const addon = require('./build/Release/testaddon');
  2. console.log(addon.hello());
复制代码
执行node
index.js:

到这里,开发环境就设置完成了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表