用 C++ 写一个 nodejs addon 例子

分类:Node.js     发布时间:2024-05-17     最后更新:2024-09-08     浏览数:937
一步一步用 C++ 写一个 nodejs addon 例子。

用 C++ 写一个 nodejs addon。

我的系统是 MacOS 10.15.7。

一、安装 node-gyp

我是全局安装。

npm i node-gyp -g

注意:node-gyp 依赖 PythonXcode Command Line Tools,详细信息请参考:https://github.com/nodejs/node-gyp

二、写 bindding.gyp

{
  "targets": [
    {
      "target_name": "addon",
      "sources": [ "hello.cc" ]
    }
  ]
}

三、编写 hello.cc

#include <node.h>

namespace demo
{
  using v8::FunctionCallbackInfo;
  using v8::Isolate;
  using v8::Local;
  using v8::Object;
  using v8::String;
  using v8::Value;

  void Method(const FunctionCallbackInfo<Value> &args)
  {
    Isolate *isolate = args.GetIsolate();
    // 返回一个字符串 world
    args.GetReturnValue().Set(String::NewFromUtf8(
                                  isolate, "world")
                                  .ToLocalChecked());
  }

  // 初始化,接收一个 exports 对象
  void Initialize(Local<Object> exports)
  {
    // 在 exports 上导出一个方法,方法名是 hello,方法的实现是 Method
    NODE_SET_METHOD(exports, "hello", Method);
  }

  // NODE_MODULE 是宏。用来初始化一个 nodejs 模块
  NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
}

四、配置和编译

配置

node-gyp configure

编译

// 默认编译输出的目录是 build/Release

node-gyp build

// 如果遇到错误,可以尝试
node-gyp rebuild

五、nodejs 调用 .node

// demo.js
const addon = require("./build/Release/addon");

console.log(addon.hello()); // 输出 world

参考

https://nodejs.org/docs/latest-v16.x/api/addons.html

https://github.com/nodejs/node-gyp

上一篇: node.js 调用 dll 下一篇: 记一次 Electron 调用 C++ addon 报错