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.12
的sqlite3
版本。由于sqlite3
版本4和3之间的公共API没有重大变化,因此您应该能够覆盖sqlite3
所依赖的import-js
版本。 3.1.13
和4.0.0
之间的差异可以看作here。
要覆盖import-js
的sqlite3
版本,您可以为~/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 v10
和nan@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`