Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js NodeJS不稳定:无法npm安装需要编译的模块_Node.js_Gyp - Fatal编程技术网

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

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

我使用NodeJS 0.11.x发行版已经有一段时间了,主要是因为我相信生成器和
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中获得更持久的本机模块,这将是一件好事。