Nodejs C++ 插件


Nodejs C++ 插件

简单 hello world ,亲测成功!

  • node-gyp 工具

使用 node-gyp 的开发者可以使用 npm install -g node-gyp 命令进行安装

  • binding.gyp

该文件会被 node-gyp(一个用于编译 Node.js 插件的工具)使用。

1
2
3
4
5
6
7
8
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cc" ]
}
]
}
  • hello.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}

void init(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method);
}

NODE_MODULE(NODE_GYP_MODULE_NAME, init)

} // namespace demo

所有的 Node.js 插件必须导出一个如下模式的初始化函数:

1
2
void Initialize(Local<Object> exports);
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)

NODE_MODULE 后面没有分号,因为它不是一个函数(详见 node.h)。

module_name 必须匹配最终的二进制文件名(不包括 .node 后缀)。

  • 编译安装C++插件

命令行执行:

1
node-gyp configure build
  • hello.js

调用C++插件

1
2
3
const addon = require('./build/Release/hello');

console.log(addon.hello());
  • 执行效果
1
node hello.js

输出:

1
world

成功!