2017-07-29 15 views
1

こんにちはV8プログラマとノードギヤ。私は、このバージョンの出力とのXCodeの一環としてOS X 10.12.6npm v3.10.10Node v6.11.1nan v2.6.2gccを実行している:`` node-gyp rebuild`で "'NewInstance'は推奨されません"という警告を消す方法は? v8のNewInstanceに代わるものは何ですか?

$ > gcc --version 
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1 
Apple LLVM version 8.1.0 (clang-802.0.42) 
Target: x86_64-apple-darwin16.7.0 
Thread model: posix 

私が正しくNewInstanceメソッドを利用する方法を理解するのに役立つと私のnpm installまたはnode-gyp rebuildプロセス中に警告を解消してくださいカスタムパッケージのインストール?

> node-gyp rebuild 

    CXX(target) Release/obj.target/cellcrypt/src/cellcrypt.o 
    CC(target) Release/obj.target/cellcrypt/src/decode.o 
    CXX(target) Release/obj.target/cellcrypt/src/DecryptionWrapper.o 
../src/DecryptionWrapper.cpp:55:44: warning: 'NewInstance' is deprecated [-Wdeprecated-declarations] 
    v8::Local<v8::Object> instance = cons->NewInstance(); 
            ^
/Users/sjcbsolo/.node-gyp/6.11.1/include/node/v8.h:3276:52: note: 'NewInstance' has been explicitly marked deprecated here 
    V8_DEPRECATED("Use maybe version", Local<Object> NewInstance() const); 
              ^
1 warning generated. 
    CC(target) Release/obj.target/cellcrypt/src/Encryption.o 
    SOLINK_MODULE(target) Release/cellcrypt.node 
clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9 [-Wdeprecated] 

私はこれらの警告を表示する必要はありません。私はNewInstanceメソッドが呼び出された方法を必要とすることによって、別のアドオンパッケージに修正を詳述githubのオープンチケットが見つかりました:

info.GetReturnValue().Set(cons->NewInstance(argc, argv)); 
info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); 

あまりスピードと効率を違反することなくNan::NewInstance()を実装するベスター方法は何ですか?

答えて

4

エラーメッセージ自体には、「多分バージョンを使用」という短い形式の回答があります。それはNewInstanceのオーバーロードされたバージョンがMaybeLocalLocalの代わりに)を返していることを伝えようとしています。これはあなたが使用するべきものです。

通常、例外がスローされると、ほとんどの操作が失敗することがあります。古いV8 APIでは埋め込み者が関連するすべての場所で例外をチェックしていることを確認するのが比較的難しくなりました。 MaybeLocalリターンタイプに基づく新しいAPIが導入されました。 MaybeLocalを取得するたびに、実際に値が含まれているかどうかを確認する必要があります。単に.ToLocalCheckedを(単に最初に手作業でチェックすることなく)使用すると、何かが失敗した場合にクラッシュすることを意味します(何も失敗することがないと保証できる場合は問題ありません)。明るい面では、あなたのコードが明らかにいつもやっていたことより悪くはありません;-)

関連する問題