Linux 版本的 Node.js 是否与 libv8 捆绑在一起?

Linux 版本的 Node.js 是否与 libv8 捆绑在一起?

我对 Node.js 如何访问 libv8 有点困惑。

我下载了 Node.js 版本 6.5.0 的 64 位“Linux 二进制文件 (.tar.xz)”,并将它们解压到/opt我的 Debian Linux 计算机上。当我跑步时node -e "console.log(process.versions.v8)",我得到5.1.281.81我希望看到最新版本的 V8 与 Node 6.5.0 一起运行。然而,当我查看 Debian 中的 Synaptic Package Manager 时,它的nodejs包对包有依赖关系libv8-3.14.5; V8 的旧版本。

那么到底是哪一个 - Node 使用已安装的 libv8(包管理器表明我的机器上安装了 3.14.5)还是 V8 与 Node.js 捆绑在一起?是否编译成node二进制文件?如果是这样,为什么包管理器有libv8依赖性?

答案1

当您从以下位置下载 Node.js 时下载网站,您获得的二进制文件静态链接到 libv8 5.1.281.81。有多种方法可以验证这一点:

  • libv8在二进制文件中查找:

    strings bin/node | less -plibv8
    

    (这将引导您到二进制文件中的“5.1.281.81”字符串)

  • 列出二进制文件中的符号并整理它们:

    nm bin/node | c++filt | less -pv8::
    

    v8::符号来自 libv8)。

您下载的存档不使用 Debian 的打包系统,因此不考虑包管理器的依赖项。如果您没有libv8-3.14.5显式安装该软件包,则可能系统上安装的其他软件包依赖于它。如果实际上没有什么需要它,您可以删除它libv8-3.14.5,您会发现没有它的node二进制文件也可以正常工作。/opt

无论如何,即使使用 Node.js 的打包版本,您也不一定会看到对 libv8 的依赖,因为Node.js 包含 V8 引擎的源码;它不是一个单独的库(至少对于 Node.js 来说不是)。

(要运行上述命令,您需要安装和 的binutils软件包。)nmc++filt

相关内容