我可以更改节点使用的 v8 版本吗.js?

Can I change v8 version used by node.js?

本文关键字:版本 v8 js 节点 我可以      更新时间:2023-10-16

我正在编写一个节点.js C++插件,它在两个相同的节点.js版本中的行为不同,但具有不同的v8版本。所以我想使 v8 版本也相同,看看不同的 v8 版本是否会导致不同的行为。

要重现这一点,您可以打开VSCode的"about"并查看节点.js和V8版本。VSCode 的 V8 的 v8 版本与同一版本的常规节点中使用的版本不同(并以-electron结尾.js(node -p process.versions.v8-node结尾(。

就我而言,我有这些版本:

  • VSCode: 节点.js 10.11.0, V8 6.9.427.31-electron.0
  • 常规节点.js:10.11.0,V8 6.8.275.32-节点.28

这里的V8 开发人员。对于记录和未来的搜索者:V8通常不承诺版本之间的 API 或 ABI 稳定性,因此默认情况下,给定的 Node.js 版本(就像任何其他 V8 嵌入器一样,例如基于 Chromium 的浏览器(只兼容一个 V8 版本。

可是:

  • 适应新的API版本所需的更改通常相当小且简单;但它们确实需要您更改一些C++代码并重新编译Node。(在过去十年中有一些例外,需要大量工作。
  • 有时我们(V8 团队(有理由破例,实际上保证 ABI 在小范围的版本中的稳定性。IIRC围绕节点10的发布就是这样一个时间;6.8 和/或 6.9 很可能在这个范围内,我不确定。
  • 有时你可能会很幸运:没有任何重大变化,早期或更新的版本都可以工作:-(

在手头的情况下,我同意@PatrickRoberts的建议,即调试可能比平分更有用。