一、編譯環境
1.安裝python2.7,建議安裝python2.7.15
2.Windows上編譯需要vs2015以及window SDK 8.1
3.Windows需要安裝如下工具(比較慢,大概需要30分鐘左右):npm install --global --production windows-build-tools
4.如果在CMD窗口編譯失敗,可打開VS開發人員命令提示符窗口進行編譯(與CMD窗口的環境變量有區別)
二、代碼結構以及Demo
// 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();
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 插件必須導出一個如下模式的初始化函數:
void Initialize(Local<Object> exports);
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
NODE_MODULE
後面沒有分號,因爲它不是一個函數(詳見 node.h
)。
module_name
必須匹配最終的二進制文件名(不包括 .node 後綴)。
在 hello.cc
示例中,初始化函數是 init
,插件模塊名是 addon
。
三、構建
編譯C++插件需要依賴node-gyp,使用npm install -g node-gyp安裝即可。然後
創建編譯入口文件binding.gyp,內容如下:
{
"targets": [
{
"target_name": "addon",
"sources": [ "hello.cc" ]
}
]
}
然後執行以下兩條命令完成編譯:
//爲當前平臺生成相應的項目構建文件
node-gyp configure
//編譯最終的二進制可執行文件
node-gyp build
四、測試
// hello.js
const addon = require('./build/Release/addon');
console.log(addon.hello());
// 打印: 'world'