1

私は NodeJS 0.11.x ディストリビューションをしばらく使用してきました。これは主に、ジェネレーターとyieldステートメントが非同期管理の点で大きな進歩をもたらすと信じているためです ( coffy-scriptsuspendを参照)。

とはいえ、最先端の不安定な NodeJS インストールを実行すると、重大な後退があります。C コンポーネントをコンパイルしようとするとnpm install xy-modulegyp(常に? 時々?) 失敗します。

これがそうでなければならない一般的な理由はありますか?状況を改善するために適用できるトリック/パッチ/構成はありますか? 特定のモジュールが NodeJS 0.10.x でコンパイルされるが、0.11.x で失敗する場合、0.12.x が利用可能になり次第、コンパイルすることを期待する必要がありますか?

更新NodeJS メーリング リストに問題をクロスポストしたところ、ben noordhuis が詳細を共有してくれました。彼のメッセージを引用する:

主な変更点は以下の2点です。

  • Persistent<T>から派生しなくなりましたHandle<T>。Persistent からハンドルを再作成するには、 を呼び出します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();
    }
    

他にも変更がありましたが、これら 2 つはすべてのネイティブ アドオンに影響します。

4

1 に答える 1

0

NodeUp #52 で詳細に回答: http://nodeup.com/fiftytwo

概要: v8 API の主要な変更、Node のいくつかのマイナーな変更、および変更はまだ進行中です。しかし、この問題を解決するために設計された 2 つのプロジェクト、NAN (github/rvagg/nan) と shim/node-addon-layer (github/tjfontaine/node-addon-layer) があります。

于 2013-09-21T23:26:19.983 に答える