v8 NAN 支持从 Nodejs 10 迁移到 14

v8 NAN support moving from Nodejs 10 to 14

在 Windows 上,我的 NodeJS / Electron 应用依赖于本机库。该应用程序通过基于 NAN.

的第 3 方节点模块与该库交互

此模块运行良好但已过时。这迫使我们坚持使用 Nodejs v10.x.x。否则 v14.x.x npm install 命令失败并显示

error C2661: 'v8::Value::BooleanValue': no overloaded function takes 0 arguments

我能够追踪到 v8 引擎中的 API,这些 API 在 v10.x.x 中被标记为折旧并在 v14.x.x 中被删除(实际 v12.x.x)。我通过更改

中的代码在本地修复了它
info[0]->BooleanValue()

info[0]->BooleanValue(Nan::GetCurrentContext()->GetIsolate())

即类似于另一个模块上的 this PR

缺点是这会给使用 Node 的人带来错误 10.x.x

error C2664: 'bool v8::Value::BooleanValue(void) const': cannot convert argument 1 from 'v8::Isolate *' to 'v8::Local<v8::Context>'

有什么好的方法可以用 NAN 模块支持不同版本的 Nodejs 吗?即考虑到不兼容的 v8 API 更改?可以在代码中处理对不同版本的支持吗?或者维护者被迫发布不同版本的模块,严格支持 Nodejs 版本。

在 NodeJS 帮助站点上询问了上述问题并收到了以下答案

https://github.com/nodejs/help/issues/2722

Nan::To<bool>(info[0]).FromJust()

完美适用于 NodeJS 10、12 和 14。