NODE_MODULE_VERSION incorreto ao usar ava
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
Isso pode ser uma das duas coisas:
- A dependência nativa que você está carregando fornece binários pré-construídos por meio de pré- construção - este é provavelmente o caso
- 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.
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