NODE_MODULE_VERSION non corretto quando si utilizza ava
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
Questa potrebbe essere una delle due cose:
- La dipendenza nativa che stai caricando fornisce binari precompilati tramite prebuild - Questo è probabilmente il caso
- 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.
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