NODE_MODULE_VERSION incorreto ao usar ava

Nov 01 2020

Eu escrevo um aplicativo Electron que usa nodegit . Para minha parte de teste, eu uso ava em combinação com Spectron para testar meu aplicativo. Todos os meus testes funcionam - incluindo funções que usam nodegit em meu aplicativo.

Além dos testes descritos acima, fiz também um arquivo de teste não eletrônico puro, no qual importo nodegit diretamente.

 import * as nodegit from 'nodegit';

Executar este teste agora via ava retorna o seguinte:

node_modules\.pnpm\[email protected]\node_modules\nodegit\build\Release\nodegit.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 82. This version of Node.js requires
NODE_MODULE_VERSION 83. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Module._extensions..node (internal/modules/cjs/loader.js:1122:18)

De onde exatamente vem a versão 82? Eu só tenho nodejs 14.15.0 instalado, que usa a versão 83esperada. Por que o node acha que a versão é uma incompatibilidade onde realmente funciona no meu aplicativo? É assim que o meu se package.jsonparece:

  "devDependencies": {
    "ava": "^3.13.0",
  },
  "scripts": {
    "ava": "node_modules/.bin/ava",
     ...
  },
  "ava": {
    "files": [
      "*.ts"
    ],
    "extensions": [
      "ts"
    ],
    "require": [
      "ts-node/register"
    ],
    "nodeArguments": [
      "--napi-modules",
      "--experimental-modules"
    ]
  },

Eu nodegitmesmo criei e no config.gypiarquivo ele até se refere a:

    "node_module_version": 83,

Fiz um exemplo reproduzível super simples: https://github.com/Githubber2021/node_module_version-issue

% node --version
14.15.0
% npm install
% npm run ava
... error

Alguém pode me explicar se isso é um bug ou de onde vem a versão 82?

Respostas

1 Slbox Nov 19 2020 at 06:46

Isso pode ser uma das duas coisas:

  1. A dependência nativa que você está carregando fornece binários pré-construídos por meio de pré- construção - este é provavelmente o caso
  2. A dependência nativa que você está carregando é baixada como código-fonte e a construção do binário depende de você.

De acordo com o README do nodegit,

"NodeGit funcionará na maioria dos sistemas prontos para uso, sem nenhuma dependência nativa."

Mas parece que você precisa, no mínimo, [email protected]obter binários pré-construídos do Nó 14. Fonte

Então, o que 82você está vendo vem da versão ABI com a qual o binário pré-construído foi compilado. Como já está usando [email protected], de alguma forma você acabou com os binários pré-construídos para a ABI errada.

Aqui está um repositório que uso que lista todos os vários binários para diferentes versões, para que você possa ver como isso pode acontecer: https://github.com/lovell/sharp/tree/v0.25.3

Eu desenvolvo em Electron e para Electron uso um comando como este para obter a versão correta do Electron para rodar npm rebuild.

npm rebuild --runtime=electron --target=8.5.3 --disturl=https://atom.io/download/atom-shell

Não sei exatamente qual é o equivalente para o nó simples, mas deixe-me saber se isso o aproxima e se sim, verei o que posso encontrar.

Pavel Nov 14 2020 at 21:01

Ei) Acho que posso resolver seu problema, tente o seguinte:

"engines": {
  "node": ">=14.0.0"
},

para seu package.json e remova node_modules e faça npm i no diretório do seu projeto. Deve ajudar