web-dev-qa-db-ja.com

Node sqlite node-gypビルドエラー: 'v8 :: Object'に 'ForceSet'という名前のメンバーがありません

Sqlite3に依存するグローバルパッケージをインストールしようとすると、ビルドエラーが発生します。このようなノードビルドエラーをデバッグする方法がよくわからないので、助けていただければ幸いです。検索から、少なくともxcodeエラーは問題ではないことがわかります。

最近OSSierraとNodeを更新しました

OSSierra: 10.13.4
Node: 10.0.0
Yarn: 1.6.0

今回実行しているコマンド。他のパッケージのグローバルインストールを実行しているときに同じエラーが発生したため、正確なnpmパッケージは重要ではないと思います...

$ yarn global add import-js

エラー

yarn global v1.6.0
(node:17489) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
[1/4] ????  Resolving packages...
[2/4] ????  Fetching packages...
[3/4] ????  Linking dependencies...
warning "gatsby > [email protected]" has incorrect peer dependency "webpack@^2.0.0 || ^3.0.0 || ^4.0.0".
warning "gatsby > [email protected]" has unmet peer dependency "caniuse-db@^1.0.30000652".
[4/4] ????  Building fresh packages...
[-/2] ⠂ waiting...
[2/2] ⠂ sqlite3: node-pre-gyp
[-/2] ⠂ waiting...
[-/2] ⠂ waiting...
error /Users/Jeff/.config/yarn/global/node_modules/sqlite3: Command failed.
Exit code: 1
Command: node-pre-gyp install --fallback-to-build
Arguments:
Directory: /Users/Jeff/.config/yarn/global/node_modules/sqlite3
Output:
node-pre-gyp info it worked if it ends with ok
node-pre-gyp info using [email protected]
node-pre-gyp info using [email protected] | darwin | x64
node-pre-gyp info check checked for "/Users/Jeff/.config/yarn/global/node_modules/sqlite3/lib/binding/node-v64-darwin-x64/node_sqlite3.node" (not found)
node-pre-gyp http GET https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/node-v64-darwin-x64.tar.gz
node-pre-gyp http 403 https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/node-v64-darwin-x64.tar.gz
node-pre-gyp ERR! Tried to download(403): https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/node-v64-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for [email protected] and [email protected] (node-v64 ABI, unknown) (falling back to source compile with node-gyp)
node-pre-gyp http 403 status code downloading tarball https://mapbox-node-binary.s3.amazonaws.com/sqlite3/v3.1.13/node-v64-darwin-x64.tar.gz
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | x64
gyp info ok
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | x64
gyp info spawn /usr/bin/python
gyp info spawn args [ '/usr/local/Cellar/node/10.0.0/libexec/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/Jeff/.config/yarn/global/node_modules/sqlite3/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/usr/local/Cellar/node/10.0.0/libexec/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/Users/Jeff/.node-gyp/10.0.0/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/Users/Jeff/.node-gyp/10.0.0',
gyp info spawn args   '-Dnode_gyp_dir=/usr/local/Cellar/node/10.0.0/libexec/lib/node_modules/npm/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/Users/Jeff/.node-gyp/10.0.0/<(target_Arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/Users/Jeff/.config/yarn/global/node_modules/sqlite3',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.' ]
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

gyp info ok
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | darwin | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  ACTION deps_sqlite3_gyp_action_before_build_target_unpack_sqlite_dep Release/obj/gen/sqlite-autoconf-3150000/sqlite3.c
  TOUCH Release/obj.target/deps/action_before_build.stamp
  CC(target) Release/obj.target/sqlite3/gen/sqlite-autoconf-3150000/sqlite3.o
  LIBTOOL-STATIC Release/sqlite3.a
  CXX(target) Release/obj.target/node_sqlite3/src/database.o
In file included from ../src/database.cc:4:
In file included from ../src/database.h:10:
In file included from ../../nan/nan.h:192:
../../nan/nan_maybe_43_inl.h:112:15: error: no member named 'ForceSet' in 'v8::Object'
  return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs);
         ~~~  ^
In file included from ../src/database.cc:4:
In file included from ../src/database.h:10:
../../nan/nan.h:834:18: warning: 'MakeCallback' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
    return node::MakeCallback(
                 ^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:171:1: note: 'MakeCallback' has been explicitly marked deprecated here
NODE_DEPRECATED("Use MakeCallback(..., async_context)",
^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:88:20: note: expanded from macro 'NODE_DEPRECATED'
    __attribute__((deprecated(message))) declarator
                   ^
In file included from ../src/database.cc:4:
In file included from ../src/database.h:10:
../../nan/nan.h:849:18: warning: 'MakeCallback' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
    return node::MakeCallback(
                 ^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:164:1: note: 'MakeCallback' has been explicitly marked deprecated here
NODE_DEPRECATED("Use MakeCallback(..., async_context)",
^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:88:20: note: expanded from macro 'NODE_DEPRECATED'
    __attribute__((deprecated(message))) declarator
                   ^
In file included from ../src/database.cc:4:
In file included from ../src/database.h:10:
../../nan/nan.h:864:18: warning: 'MakeCallback' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
    return node::MakeCallback(
                 ^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:157:1: note: 'MakeCallback' has been explicitly marked deprecated here
NODE_DEPRECATED("Use MakeCallback(..., async_context)",
^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:88:20: note: expanded from macro 'NODE_DEPRECATED'
    __attribute__((deprecated(message))) declarator
                   ^
In file included from ../src/database.cc:4:
In file included from ../src/database.h:10:
../../nan/nan.h:1473:31: warning: 'MakeCallback' is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
    return scope.Escape(node::MakeCallback(
                              ^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:171:1: note: 'MakeCallback' has been explicitly marked deprecated here
NODE_DEPRECATED("Use MakeCallback(..., async_context)",
^
/Users/Jeff/.node-gyp/10.0.0/include/node/node.h:88:20: note: expanded from macro 'NODE_DEPRECATED'
    __attribute__((deprecated(message))) declarator
                   ^
../src/database.cc:144:9: warning: unused variable 'status' [-Wunused-variable]
    int status = uv_queue_work(uv_default_loop(),
        ^
../src/database.cc:230:9: warning: unused variable 'status' [-Wunused-variable]
    int status = uv_queue_work(uv_default_loop(),
        ^
../src/database.cc:525:9: warning: unused variable 'status' [-Wunused-variable]
    int status = uv_queue_work(uv_default_loop(),
        ^
../src/database.cc:625:9: warning: unused variable 'status' [-Wunused-variable]
    int status = uv_queue_work(uv_default_loop(),
        ^
8 warnings and 1 error generated.
make: *** [Release/obj.target/node_sqlite3/src/database.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/Cellar/node/10.0.0/libexec/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:225:12)
gyp ERR! System Darwin 17.5.0
gyp ERR! command "/usr/local/Cellar/node/10.0.0/bin/node" "/usr/local/Cellar/node/10.0.0/libexec/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/Users/Jeff/.config/yarn/global/node_modules/sqlite3/lib/binding/node-v64-darwin-x64/node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=/Users/Jeff/.config/yarn/global/node_modules/sqlite3/lib/binding/node-v64-darwin-x64"
gyp ERR! cwd /Users/Jeff/.config/yarn/global/node_modules/sqlite3
gyp ERR! node -v v10.0.0
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute 'node-gyp build --fallback-to-build --module=/Users/Jeff/.config/yarn/global/node_modules/sqlite3/lib/binding/node-v64-darwin-x64/node_sqlite3.node --module_name=node_sqlite3 --module_path=/Users/Jeff/.config/yarn/global/node_modules/sqlite3/lib/binding/node-v64-darwin-x64' (1)
node-pre-gyp ERR! stack     at ChildProcess.<anonymous> (/Users/Jeff/.config/yarn/global/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
node-pre-gyp ERR! stack     at maybeClose (internal/child_process.js:947:16)
node-pre-gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:236:5)
node-pre-gyp ERR! System Darwin 17.5.0
node-pre-gyp ERR! command "/usr/local/Cellar/node/10.0.0/bin/node" "/Users/Jeff/.config/yarn/global/node_modules/sqlite3/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /Users/Jeff/.config/yarn/global/node_modules/sqlite3
node-pre-gyp ERR! node -v v10.0.0
node-pre-gyp ERR! node-pre-gyp -v v0.6.39




 Jeff  …  global  ERROR  $   yarn version
yarn version v1.6.0
(node:17733) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
error An unexpected error occurred: "canceled".
info If you think this is a bug, please open a bug report with the information provided in "/Users/Jeff/.config/yarn/global/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/version for documentation about this command.
10
deltaskelta

ほとんどのログは非推奨警告のノイズですが、これを引き起こす単一のエラーは次のとおりです。

In file included from ../src/database.cc:4:
In file included from ../src/database.h:10:
In file included from ../../nan/nan.h:192:
../../nan/nan_maybe_43_inl.h:112:15: error: no member named 'ForceSet' in 'v8::Object'
  return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs);
         ~~~  ^

ここでの問題は、V8がForceSetメソッドをV8バージョンで削除したことです。これはNode 10が使用し、 nan モジュールが使用します。nanは、V8の重大な変更にまだ追いついていません。

インストールしようとしているimport-jsパッケージは、^3.1.12のバージョンsqlite3によって異なります。バージョン4と3の間でsqlite3のパブリックAPIに重大な変更はないため、sqlite3が依存するimport-jsのバージョンをオーバーライドできるはずです。 3.1.134.0.0の違いは、 こちら で確認できます。

import-jssqlite3のバージョンを上書きするには、選択的なバージョン解決ブロックを~/config/yarn/global/package.jsonに追加します。

...
"resolutions": {
  "import-js/**/sqlite3": "^4.0.0"
},
...

その後、yarn global remove import-jsの後にyarn global add import-jsが続きます。私のSierraとLinuxベースのOSでコンパイルできます。すべてが問題なく動作することを保証しているわけではありませんが、sqlite3に対するAPIの破壊的な変更がないため、理論的には正常に機能するはずです。

12
Sven

クイックソリューション

ノード10.xから以前のノードLTS 8.xへのダウングレード: https://github.com/nodejs/Release

これは、NVMを使用している場合は取るに足らないことです。 https://askubuntu.com/questions/426750/how-can-i-update-my-nodejs-to-the-latest-バージョン/ 1115255#1115255

正しい解決策:nan version> = v2.8.0を使用するように依存関係をアップグレードします

ノード10.xをサポートしない古いバージョンのnanパッケージに依存する依存関係がある可能性があります。

まず、ログを読んで失敗したパッケージを見つけるか、次のコードを使用します: 特定のnpmモジュールの依存関係ツリーを表示する方法

これはForceSetを削除したnanのバージョンのようです:

commit 95cbb976d6fbbba88ba0f86dd188223a8591b4e7
Author: Benjamin Byholm <[email protected]>
Date:   Wed Nov 1 01:10:24 2017 +0200

    Use DefineOwnProperty instead of ForceSet

https://github.com/nodejs/nan/commit/95cbb976d6fbbba88ba0f86dd188223a8591b4e7

コミットを含むすべてのタグをリストする方法は? このコミットが行われたことがわかります:v2.8.0

したがって、すべてがv2.8.0より新しいnanを使用するように依存関係を管理する必要があります。

次に、.nvmrcをプロジェクトに追加して、Nodeのテストに使用したバージョン )を人々に示します(ここで説明します )。

node-sassは最近問題を引き起こしたものです。ノード10はnode-sass 4.9以降でのみサポートされているようです。

nanとは

nanは、ネイティブノードパッケージに対してv8 APIをより安定に維持するための移植性ヘルパーパッケージです。

deps/v8のノードソースコードに含まれています

したがって、しばらく前に、v8はForceSetを削除したに違いありません。 nanは、移植性のために、それをより長い時間保持したに違いありません。しかし、最終的にナンでさえそれを削除する時が来たと決定しました。

関連する問題

それらは同じ根本原因を持っているようです:

npmでこの問題が発生した場合、ライブラリnannode v10の間に[email protected]で解決された問題があります。したがって、nanをアンインストールして最新バージョンをインストールすると、問題が解決します。

npm uninstall nan
npm install https://github.com/nodejs/nan
npm install <package-name>
0
Sinandro