跳转到主要内容

Node.js 原生插件与 Electron 5.0

·阅读时间 2 分钟

如果您在使用 Electron 5.0 的原生 Node.js 插件时遇到问题,那可能是因为该插件需要更新才能与最新版本的 V8 兼容。


再见 v8::Handle,你好 v8::Local

在 2014 年,V8 团队废弃了 v8::Handle,转而使用 v8::Local 作为局部句柄。Electron 5.0 包含了一个 V8 版本,该版本最终彻底移除了 v8::Handle,因此仍然使用它的原生 Node.js 插件需要更新才能与 Electron 5.0 配合使用。

所需的代码更改很少,但每个仍然使用 v8::Handle 的原生 Node 模块都将无法通过 Electron 5.0 构建,并且需要修改。好消息是,Node.js v12 也将包含此 V8 更改,因此任何使用 v8::Handle 的模块无论如何都需要更新才能与即将推出的 Node 版本配合使用。

我维护一个原生插件,我能提供什么帮助?

如果您维护 Node.js 的原生插件,请确保将所有 v8::Handle 的出现替换为 v8::Local。前者只是后者的一个别名,因此无需对其他内容进行更改即可解决此特定问题。

您可能还想了解 N-API,它独立于 V8 维护,作为 Node.js 的一部分,旨在将原生插件与底层 JavaScript 引擎的变化隔离开来。您可以在 Node.js 网站的 N-API 文档中找到更多信息。

求助!我在我的应用程序中使用了一个原生插件,但它无法工作!

如果您在应用程序中使用 Node.js 的原生插件,并且由于此问题导致原生插件无法构建,请与插件作者联系,查看他们是否发布了修复此问题的最新版本。如果还没有,联系作者(或 发起 Pull Request!)可能是最好的选择。