Electron中的Node Addons(C ++)

时间:2017-03-24 10:20:16

标签: electron node.js-addon

我正在尝试使用Electron和Node JS将C ++与HTML集成。但我对NODE_MODULE_VERSION感到困惑。 我有一个binding.gyp之类的例子。

{
  "targets": [
    {
      "target_name": "addon",
      "sources": [ "src/hello.cc" ],
      "include_dirs": [
      "<!(node -e \"require('nan')\")"
      ]
    }
  ]
}

和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();
  args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}

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

NODE_MODULE(addon, init)

}  // namespace demo

并且在node-gyp配置构建之后,它们与节点

运行良好
const addon = require('./package/build/Release/addon');
addon.hello();

但是当我把它与电子结合起来时,有些不对劲。 enter image description here

我已经阅读了电子和nodejs的API。有些人告诉我安装nvm来改变nodejs的版本,其他人建议我安装电子版本。我试过,但是他们没有用。(我认为它会如果他们工作就会很奇怪)。 我想问题是nodejs的版本。但是我的节点是v7.7.4!那么,我该如何更新模块的版本...... 感谢〜

3 个答案:

答案 0 :(得分:2)

正如@pergy所提到的,你应该用--taget选项构建,指向电子中使用的正确的iojs(节点)版本。

在此处查看工作示例(窗口)。 https://github.com/weliwita/electron-edge-sample/tree/42996881/node-addons-c-in-electron

答案 1 :(得分:0)

制作C ++插件后,将其存储为“ {targets.target_name} .node”。 因此,当您在js代码中使用它时,请使用:-

const addon = require('./package/build/Release/addon.node');

在我的情况下有效。 而且,您也可以使用正确的路径将“ .node”文件移动到任何地方,而无需使用gyp创建的任何其他文件或文件夹,因为“ .node”文件是c ++插件。

答案 2 :(得分:-1)

我在这里发布了一个 git 项目:https://github.com/anurag2911/angular-electron-nodeaddon 这是一个简单的 angular-electron-nodeaddon 项目。这是一个如何编写 c++ 节点插件并在电子中使用它们的工作示例。