Node sqlite node-gyp build error:'v8 :: Object'中没有名为'ForceSet'的成员

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node sqlite node-gyp build error:'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] 
答案

大多数日志只是弃用警告的噪音,但导致此错误的单个错误是:

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已经删除了Node 10使用的V8版本中的ForceSet方法,而这又是nan模块使用的方法。 nan尚未赶上V8的突破性变化。

您尝试安装的import-js软件包取决于^3.1.12sqlite3版本。由于sqlite3版本4和3之间的公共API没有重大变化,因此您应该能够覆盖sqlite3所依赖的import-js版本。 3.1.134.0.0之间的差异可以看作here

要覆盖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的操作系统上编译。我并不保证一切都能完美运行,但理论上它应该是因为sqlite3没有重大的API变化。

另一答案

快速解决方案

从节点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-version/1115255#1115255

正确的解决方案:升级依赖项以使用nan version> = v2.8.0

您可能具有依赖于不支持节点10.x的旧版nan包的依赖项。

首先通过阅读日志找到失败的包,或使用:How to view the dependency tree of a given npm module?

这似乎是删除ForceSet的nan版本:

commit 95cbb976d6fbbba88ba0f86dd188223a8591b4e7
Author: Benjamin Byholm <bbyholm@abo.fi>
Date:   Wed Nov 1 01:10:24 2017 +0200

    Use DefineOwnProperty instead of ForceSet

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

使用:How to list all tags that contain a commit?我们看到这个提交进入:v2.8.0

因此,您需要管理您的依赖项,以便所有内容都使用比v2.8.0更新的内容。

然后在您的项目中添加一个.nvmrc,以向人们表明您测试的Node版本为as explained here

node-sass最近给我带来了问题,看起来节点10只支持node-sass 4.9:

什么是nan

nan是一个可移植性帮助程序包,用于维护v8 API对于本机节点程序包更加稳定。

它包含在deps/v8的节点源代码中

不久前,v8必须放弃ForceSet。 nan必须保留更长时间以便携带。但最终甚至连纳都认为是时候将其删除了。

相关问题

这似乎有相同的根本原因:

另一答案

对于那些与npm有这个问题的人,在nan解决的库node v10nan@2.1.0之间存在问题。所以卸载nan并安装最新版本解决了这个问题:

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

以上是关于Node sqlite node-gyp build error:'v8 :: Object'中没有名为'ForceSet'的成员的主要内容,如果未能解决你的问题,请参考以下文章

无法安装 better-sqlite3 discord.js

node-gyp 在安装过程中失败 web3 scrypt@6.0.3 install: `node-gyp rebuild`

Windows 使用 node-gyp

解决 node-gyp rebuild 卡住 的问题

npm install 时卡在了node-gyp rebuild

如何让 node-gyp 在 Windows 7 平台上工作