NODE_MODULE_VERSION non corretto quando si utilizza ava

Nov 01 2020

Scrivo un'app Electron che utilizza nodegit . Per la mia parte di prova utilizzo ava in combinazione con Spectron per testare la mia app. Tutti i miei test funzionano, comprese le funzioni che utilizzano nodegit nella mia app.

Oltre ai test sopra descritti ho realizzato anche un file di test puro non-Electron in cui importa direttamente nodegit.

 import * as nodegit from 'nodegit';

L'esecuzione di questo test ora tramite ava restituisce questo:

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)

Da dove viene esattamente la versione 82? Ho installato solo nodejs 14.15.0 , che utilizza la versione 83come previsto. Perché node pensa che la versione non corrisponda a quella che funziona effettivamente nella mia app? Ecco come package.jsonappare il mio :

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

Mi sono costruito da nodegitsolo e nel config.gypifile si riferisce anche a:

    "node_module_version": 83,

Ho fatto un semplicissimo esempio riproducibile: https://github.com/Githubber2021/node_module_version-issue

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

Qualcuno può spiegarmi se si tratta di un bug o da dove proviene la versione 82?

Risposte

1 Slbox Nov 19 2020 at 06:46

Questa potrebbe essere una delle due cose:

  1. La dipendenza nativa che stai caricando fornisce binari precompilati tramite prebuild - Questo è probabilmente il caso
  2. La dipendenza nativa che stai caricando viene scaricata come codice sorgente e la creazione del binario dipende da te.

Secondo README di nodegit,

"NodeGit funzionerà sulla maggior parte dei sistemi out-of-the-box senza dipendenze native."

Ma sembra che sia necessario almeno [email protected]per ottenere i binari precompilati da use Node 14. Source

Quindi quello 82che stai vedendo proviene dalla versione ABI con cui è stato compilato il binario precostruito. Dato che stai già utilizzando [email protected], in qualche modo sei finito con i binari precompilati per l'ABI sbagliato.

Ecco un repository che uso che elenca tutti i vari binari per versioni diverse, così puoi vedere come potrebbe accadere: https://github.com/lovell/sharp/tree/v0.25.3

Sviluppo in Electron e per Electron utilizzo un comando come questo per ottenere la versione corretta di Electron npm rebuildcontro cui eseguire .

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

Non so esattamente quale sia l'equivalente per nodo normale, ma fammi sapere se questo ti avvicina e in tal caso vedrò cosa riesco a trovare.

Pavel Nov 14 2020 at 21:01

Ehi) Penso di poter risolvere il tuo problema, prova questo:

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

al tuo package.json e rimuovi node_modules ed esegui npm i nella directory del tuo progetto. Dovrebbe aiutare