私は NodeJS 0.11.x ディストリビューションをしばらく使用してきました。これは主に、ジェネレーターとyield
ステートメントが非同期管理の点で大きな進歩をもたらすと信じているためです ( coffy-scriptとsuspendを参照)。
とはいえ、最先端の不安定な NodeJS インストールを実行すると、重大な後退があります。C コンポーネントをコンパイルしようとするとnpm install xy-module
、gyp
(常に? 時々?) 失敗します。
これがそうでなければならない一般的な理由はありますか?状況を改善するために適用できるトリック/パッチ/構成はありますか? 特定のモジュールが 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 つはすべてのネイティブ アドオンに影響します。