NodeJS不稳定:无法npm安装需要编译的模块

时间:2013-09-20 16:20:21

标签: node.js gyp

我一直在使用NodeJS 0.11.x发行版已有一段时间了,主要是因为我认为生成器和yield语句在异步可管理性方面带来了很大进步(参见coffy-script和{ {3}})。

说,在运行前沿的,不稳定的NodeJS安装时会出现严重的挫折:在执行npm install xy-module时,gyp在尝试编译任何C组件时都会失败(总是?有时?)。

这是否必须如此?是否有任何技巧/补丁/配置我可以申请来纠正这种情况?如果给定的模块在NodeJS 0.10.x上编译,但在0.11.x上失败,我是否应该在它可用时立即在0.12.x上编译?

更新我在NodeJS邮件列表和suspend上交叉发布了该问题。引用他的信息:

两个主要变化如下:

  • Persistent<T>不再来自Handle<T>。要重新创建 处理持久性,请致电Local<T>::New(isolate, persistent)。 您可以使用Isolate::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();
    }
    

    在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();
    }
    

有更多更改,但这两个更改会影响每个本机加载项。

1 个答案:

答案 0 :(得分:0)

在NodeUp#52中详细回答:http://nodeup.com/fiftytwo

摘要:v8 API的主要更改,Node中的一些细微更改以及更改仍在进行中。但是有两个项目旨在帮助解决这个问题,NAN(github / rvagg / nan)和shim / node-addon-layer(github / tjfontaine / node-addon-layer)。