A versão do Linux do Node.js vem empacotada com libv8?

4

Estou um pouco confuso sobre como o Node.js obtém acesso à libv8.

Eu baixei os "Linux Binaries (.tar.xz)" de 64 bits para a versão 6.5.0 do Node.js e os extraí para /opt na minha máquina Linux Debian. Quando eu executo node -e "console.log(process.versions.v8)" , recebo 5.1.281.81 , que é a versão recente do V8 que eu esperaria ver rodando com o Nó 6.5.0. No entanto, quando eu vejo o Gerenciador de Pacotes Synaptic no Debian, seu pacote nodejs tem uma dependência do pacote libv8-3.14.5 ; uma versão muito mais antiga do V8.

Então, qual é - o Node usa a libv8 instalada (o gerenciador de pacotes indica que o 3.14.5 está instalado na minha máquina) ou o V8 vem junto com o Node.js? É compilado no binário node ? Em caso afirmativo, por que o gerenciador de pacotes tem a dependência libv8 ?

    
por Jez 10.09.2016 / 16:39

1 resposta

8

Quando você faz o download do Node.js do site de download , o binário que você recebe é vinculado estaticamente à libv8 5.1.281.81. Existem várias maneiras de verificar isso:

  • procure libv8 no binário:

    strings bin/node | less -plibv8
    

    (isso levará você à string "5.1.281.81" no binário)

  • liste os símbolos no binário e solte-os:

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

    (os símbolos v8:: vêm da libv8).

O arquivo que você baixou não usa o sistema de empacotamento do Debian, então as dependências do gerenciador de pacotes não são consideradas. Se você não instalou explicitamente o pacote libv8-3.14.5 , provavelmente algum outro pacote instalado em seu sistema depende dele. Se nada realmente precisar, você pode remover libv8-3.14.5 e verá que o node binário em /opt funciona bem sem ele.

Em qualquer caso, mesmo com uma versão empacotada do Node.js você não necessariamente veria uma dependência na libv8, porque Node.js inclui a origem do mecanismo V8 ; não é uma biblioteca separada (pelo menos não para o Node.js).

(Para executar os comandos acima, você precisará instalar o pacote binutils para nm e c++filt .)

    
por 10.09.2016 / 17:25