我正在尝试使用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();
我已经阅读了电子和nodejs的API。有些人告诉我安装nvm来改变nodejs的版本,其他人建议我安装电子版本。我试过,但是他们没有用。(我认为它会如果他们工作就会很奇怪)。 我想问题是nodejs的版本。但是我的节点是v7.7.4!那么,我该如何更新模块的版本...... 感谢〜
答案 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++ 节点插件并在电子中使用它们的工作示例。