创建第一个节点.js插件
Creating first node.js addon
我正在按照文档创建一个节点.js插件。 我跑了
node-gyp configure build --python C:Python27
并收到错误
错误:生成 ENOENT
全栈:
gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.3
gyp info using node@0.10.29 | win32 | x64
gyp ERR! configure error
gyp ERR! stack Error: spawn ENOENT
gyp ERR! stack at errnoException (child_process.js:1000:11)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:791:34)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "node" "C:\Users\bmackey\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js" "configure" "build" "--python" "C:\Python27"
gyp ERR! cwd D:DevProjectsNodeAddOn
gyp ERR! node -v v0.10.29
gyp ERR! node-gyp -v v1.0.3
gyp ERR! not ok
我的 3 个必需文件都在同一个目录中:
hello.cc:
// hello.cc
#include <node.h>
//Note that all node addons must export an initialization function.
//Does this go in a .h or here or what?
void Initialize (Handle<Object> exports);
NODE_MODULE(module_name, Initialize)
using namespace v8;
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}
void init(Handle<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method);
}
NODE_MODULE(addon, init)
binding.gyp:
{
"targets": [
{
"target_name": "addon",
"sources": [ "hello.cc" ]
}
]
}
您好.js:
var addon = require('./build/Release/addon');
console.log(addon.hello()); // 'world'
可选的--python
参数需要 python 的路径.exe:
node-gyp configure build --python C:Python27python.exe
node.js网站上的示例对我不起作用。 这家伙的例子效果更好,但最终这奏效了,对我来说更有意义:
hello.cc
#include <node.h>
using namespace v8;
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("here is some output"));
}
void init(Handle<Object> target) {
target->Set(String::NewSymbol("methodName"),
FunctionTemplate::New(Method)->GetFunction());
}
NODE_MODULE(myModuleName, init)
binding.gyp:
{
"targets": [
{
"target_name": "myModuleName",
"sources": [ "hello.cc" ]
}
]
}
您好.js:
var addon = require('./build/Release/myModuleName');
console.log(addon.methodName()); // prints "here is some output"
这种布局消除了一些命名歧义。
相关文章:
- 如何使用 v8 本机插件将 C++ 数组交付到 Node.js
- 从不同的节点插件方法多次调用JS函数
- 节点.js C++插件 - 设置数组的某个索引
- 插件中节点.js/Nan 回调C++不频繁的隔离错误
- 使用 N-API 将数据流式传输到 Node.js C++ 插件中
- 未分配正在释放的本机node.js插件错误指针
- g++ 构建错误与 node-gyp 重建 Node.js 插件
- Node.js C 插件开发的编译器版本
- 将任意的JavaScript数据对象传递到Node.js C 插件
- 从C 插件中调用QML中的JS函数
- 节点.js插件计时器上下文
- Node.js插件类成员函数
- 将文本文件创建到节点.js的插件C++
- 节点.js C++ 插件:返回新副本
- Node.js插件对象销毁
- node.js 使用 cocoa 框架的插件
- 如何存储对函数的引用,以便稍后可以在节点.js C++插件模块中回调它
- 创建第一个节点.js插件
- 为什么在node.js中,c++插件和javascript之间的交互非常昂贵
- 在填充Int32Array时,Node.JS的性能与本机C++插件相比