[英]NodeJS unstable: unable to npm-install modules that need compilation
我已经使用NodeJS 0.11.x发行版已有一段时间了,主要是因为我相信生成器和yield
语句在异步可管理性方面带来了很大的进步(请参阅coffy-script和suspend )。
就是说,运行尖端的,不稳定的NodeJS安装时会遇到严重的挫折:当执行npm install xy-module
时,尝试编译任何C组件时gyp
将会失败(总是?有时是?)。
有一定的普遍原因吗? 我可以采取任何技巧/补丁/配置来纠正这种情况吗? 如果给定的模块确实可以在NodeJS 0.10.x上编译,但是在0.11.x上失败,我是否希望它在可用时立即在0.12.x上编译?
更新我在NodeJS邮件列表上交叉发布了该问题, 本·诺德惠斯很友好,可以分享一些细节 。 引用他的信息:
两个主要更改如下:
Persistent<T>
不再从Handle<T>
派生。 要从持久性重新创建句柄,请调用Local<T>::New(isolate, persistent)
。 您可以使用Isolate::GetCurrent()
获得隔离(但请注意,在较新版本的V8中, Isolate::GetCurrent()
可能会消失。)
C ++回调和访问器的原型已更改。 以前,您的函数如下所示:
Handle<Value> MyCallback(const Arguments& args) { HandleScope handle_scope; /* Do useful work, then: */ return handle_scope.Close(Integer::New(42)); /* Or: */ return handle_scope.Close(String::New("hello")); /* Or: */ return Null(); }
在v0.11和v0.12中变为:
void MyCallback(const FunctionCallbackInfo<Value>& args) { Isolate* isolate = args.GetIsolate(); HandleScope handle_scope(isolate); /* Do useful work, then: */ args.GetReturnValue().Set(42); /* Or: */ args.GetReturnValue().Set(String::NewFromUtf8(isolate, "hello")); /* Or: */ args.GetReturnValue().SetNull(); }
发生了更多更改,但是这两个都会影响每个本机加载项。
在NodeUp#52中详细回答: http ://nodeup.com/fiftytwo
简介:v8 API中的重大更改,Node中的一些较小更改,并且这些更改仍在进行中。 但是有两个旨在解决该问题的项目,即NAN(github / rvagg / nan)和shim / node-addon-layer(github / tjfontaine / node-addon-layer)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.