Node.js NodeJS不稳定:无法npm安装需要编译的模块
我使用NodeJS 0.11.x发行版已经有一段时间了,主要是因为我相信生成器和Node.js NodeJS不稳定:无法npm安装需要编译的模块,node.js,gyp,Node.js,Gyp,我使用NodeJS 0.11.x发行版已经有一段时间了,主要是因为我相信生成器和yield语句在异步可管理性方面带来了巨大的进步(请参阅和) 这就是说,在运行最前沿、不稳定的NodeJS安装时会遇到严重挫折:在执行npm安装xy模块时,gyp在尝试编译任何C组件时都会失败(总是?有时?) 是否有一个普遍的原因必须如此?是否有任何技巧/补丁/配置可用于纠正这种情况?如果一个给定的模块确实在NodeJS 0.10.x上编译,但在0.11.x上失败,那么我应该期望它在0.12.x上编译吗 更新我在No
yield
语句在异步可管理性方面带来了巨大的进步(请参阅和)
这就是说,在运行最前沿、不稳定的NodeJS安装时会遇到严重挫折:在执行npm安装xy模块时,gyp
在尝试编译任何C组件时都会失败(总是?有时?)
是否有一个普遍的原因必须如此?是否有任何技巧/补丁/配置可用于纠正这种情况?如果一个给定的模块确实在NodeJS 0.10.x上编译,但在0.11.x上失败,那么我应该期望它在0.12.x上编译吗
更新我在NodeJS邮件列表上交叉发布了该问题,并且。引用他的信息:
这两个主要变化如下:
Persistent
不再从句柄派生。重现
来自持久性调用的句柄Local::New(隔离,持久性)
。
您可以使用隔离::GetCurrent()
获得隔离(但请注意
Isolate::GetCurrent()
可能会在新版本的V8中消失。)
<> > 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();
}
handlemycallback(常量参数和参数){
手柄镜手柄镜;
/*做一些有用的工作,然后:*/
返回句柄_scope.Close(Integer::New(42));
/*或:*/
返回句柄_scope.Close(字符串::New(“hello”);
/*或:*/
返回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();
}
void MyCallback(常量函数callbackinfo&args){
隔离*隔离=args.GetIsolate();
手柄镜手柄范围(隔离);
/*做一些有用的工作,然后:*/
args.GetReturnValue().Set(42);
/*或:*/
args.GetReturnValue().Set(字符串::NewFromUtf8(隔离“hello”);
/*或:*/
args.GetReturnValue().SetNull();
}
有更多的变化,但这两个影响每一个本机插件 在NodeUp#52中详细回答:
概要:v8 API中的主要更改,节点中的一些小更改,这些更改仍在进行中。但是有两个项目是为了帮助解决这个问题而设计的,NAN(github/rvagg/NAN)和shim/node附加层(github/tjfontaine/node附加层)。人们应该用纯js构建他们的模块,设置windows进行编译是一项荒谬的工作。不得不说,我完全支持这一点,因为编译步骤会给软件增加一个故障点。在下面@rvagg提到的(非常有趣的)播客中,他们说并非所有事情都可以用纯JS来完成(现在),而且可能会有速度优势(但我看到这些优势正在减弱),我最好的例子就是WebSocket。Socket.io需要编译,我不会在一个小时内完成一套指令,当我可以使用它时,我可能会争辩说Node中某些高级功能的性能或功能,这是有争议的,无论如何这些都是非常必要的,应该在Node中解决,或者Node不是正确的平台,您应该使用C/C++。跨平台是Node的一大优点,应该在IMO中加以保留。在某个合适的时间点,如果能够推动NAN使其像NPM一样流行,那么我们就可以在NodeJ中获得更持久的本机模块,这将是一件好事。