node.js的C++扩展(nan版)

最近在看一个使用JS控制树莓派的项目(https://github.com/fivdi/pigpio);发现它其实是利用一个nodejs的C++扩展,最终调用C库实现的;所以分享下nodejs的C++扩展,使用的是nan的方式;

1.初始化node项目

mkdir demo
cd demo
npm init

2.安装编译工具和头文件

sudo npm install -g node-gyp
npm install nan bindings --save 

node-gyp是C++扩展的编译工具;
nan和bindings包含了C++扩展需要的头文件;

3.编写C++代码(./src/demo.cc)

#include 

NAN_METHOD(multi)
{
    int result = 1;
    for (int i = 0; i < info.Length(); i++)
    {
        result *= info[i]->NumberValue();
    }
    info.GetReturnValue().Set(Nan::New(result));
}

NAN_METHOD(add)
{
    int result = 0;
    for (int i = 0; i < info.Length(); i++)
    {
        result += info[i]->NumberValue();
    }
    info.GetReturnValue().Set(Nan::New(result));
}

void init(v8::Local exports)
{
    Nan::SetMethod(exports, "multi", multi);
    Nan::SetMethod(exports, "add", add);
}

NODE_MODULE(demo, init);

4.编写node-gyp配置文件

文件名固定为binding.gyp,提供给node-gyp来编译C++扩展;

{
  "targets": [
    {
      "target_name": "demo",
      "sources": [ "./src/demo.cc" ],
      "include_dirs": [
        "

5.运行配置文件、编译C++文件

// 只有配置文件发生变化后,才需运行
node-gyp configure
node-gyp build

6.编写js代码测试(./demo.js)

const demo = require('./build/Release/demo')
console.log(demo.add(3, 6));
console.log(demo.multi(3, 6));
node demo.js
9
18

项目结构说明

image.png

你可能感兴趣的:(node.js的C++扩展(nan版))