跳到主要内容

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 感兴趣,它作为 Node.js 本身的一部分与 V8 分开维护,旨在使原生插件不受底层 JavaScript 引擎变化的影响。您可以在 Node.js 网站上的 N-API 文档 中找到更多信息。

求助!我的应用使用了原生插件,但它无法工作!

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