NODE_MODULE_VERSION incorrecto al usar ava

Nov 01 2020

Escribo una aplicación de Electron que usa nodegit . Para mi parte de prueba, uso ava en combinación con Spectron para probar mi aplicación. Todas mis pruebas funcionan, incluidas las funciones que usan nodegit en mi aplicación.

Además de las pruebas descritas anteriormente, también hice un archivo de prueba puro que no es Electron en el que importo nodegit directamente.

 import * as nodegit from 'nodegit';

La ejecución de esta prueba ahora a través de ava devuelve esto:

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 dónde viene exactamente la versión 82? Solo tengo instalado nodejs 14.15.0 , que usa la versión 83como se esperaba. ¿Por qué el nodo cree que la versión no coincide con el lugar donde funciona realmente en mi aplicación? Así es como se package.jsonve mi :

  "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"
    ]
  },

Lo construí nodegityo mismo y en el config.gypiarchivo incluso se refiere a:

    "node_module_version": 83,

Hice un ejemplo reproducible súper simple: https://github.com/Githubber2021/node_module_version-issue

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

¿Alguien puede explicarme si esto es un error o de dónde viene la versión 82?

Respuestas

1 Slbox Nov 19 2020 at 06:46

Esta podría ser una de dos cosas:

  1. La dependencia nativa que está cargando proporciona binarios precompilados a través de precompilación : este es probablemente el caso
  2. La dependencia nativa que está cargando se descarga como código fuente y la construcción del binario depende de usted.

Según el archivo README de nodegit,

"NodeGit funcionará en la mayoría de los sistemas listos para usar sin dependencias nativas".

Pero parece que necesita como mínimo [email protected]obtener binarios precompilados del uso del nodo 14. Fuente

Entonces, lo 82que está viendo proviene de la versión ABI con la que se compiló el binario precompilado. Como ya está usando [email protected], de alguna manera ha terminado con los binarios prediseñados para la ABI incorrecta.

Aquí hay un repositorio que uso que enumera todos los diversos binarios para diferentes versiones, para que pueda ver cómo puede suceder esto: https://github.com/lovell/sharp/tree/v0.25.3

Desarrollo en Electron y para Electron uso un comando como este para obtener la versión correcta de Electron para ejecutar npm rebuild.

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

No sé exactamente cuál es el equivalente para el nodo simple, pero avíseme si esto lo acerca y, de ser así, veré qué puedo encontrar.

Pavel Nov 14 2020 at 21:01

Hey) Creo que puedo resolver tu problema, solo prueba esto:

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

a su package.json y elimine node_modules y haga npm i en el directorio de su proyecto. Debería ayudar