Falsche NODE_MODULE_VERSION bei Verwendung von ava
Ich schreibe eine Electron-App, die Nodegit verwendet . Für meinen Testteil verwende ich ava in Kombination mit Spectron, um meine App zu testen. Alle meine Tests funktionieren - einschließlich Funktionen, die Nodegit in meiner App verwenden.
Zusätzlich zu den oben beschriebenen Tests habe ich auch eine reine Nicht-Elektronen- Testdatei erstellt, in die ich Nodegit direkt importiere.
import * as nodegit from 'nodegit';
Wenn Sie diesen Test jetzt über ava ausführen, wird Folgendes zurückgegeben:
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)
Woher kommt genau Version 82? Ich habe nur nodejs 14.15.0 installiert, die 83erwartungsgemäß die Version verwenden . Warum glaubt Node, dass die Version nicht übereinstimmt, wenn sie tatsächlich in meiner App funktioniert? So sieht mein package.jsonaus:
"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"
]
},
Ich habe nodegitmich selbst gebaut und in der config.gypiDatei bezieht es sich sogar auf:
"node_module_version": 83,
Ich habe ein super einfaches reproduzierbares Beispiel gemacht: https://github.com/Githubber2021/node_module_version-issue
% node --version
14.15.0
% npm install
% npm run ava
... error
Kann mir jemand erklären, ob dies ein Fehler ist oder woher Version 82 kommt?
Antworten
Dies könnte eines von zwei Dingen sein:
- Die native Abhängigkeit Sie sind Laden vorkompilierte Binaries über bietet vorkompilierte - Dies ist wahrscheinlich der Fall ,
- Die native Abhängigkeit, die Sie laden, wird als Quellcode heruntergeladen, und das Erstellen der Binärdatei liegt bei Ihnen.
Laut der README von nodegit
"NodeGit funktioniert auf den meisten sofort einsatzbereiten Systemen ohne native Abhängigkeiten."
Es sieht jedoch so aus, als müssten Sie mindestens [email protected]vorgefertigte Binärdateien von Node 14 verwenden. Quelle
Das, was 82Sie sehen, stammt aus der ABI-Version, gegen die die vorgefertigte Binärdatei kompiliert wurde. Da Sie bereits verwenden [email protected], haben Sie irgendwie die vorgefertigten Binärdateien für das falsche ABI erhalten.
Hier ist ein Repo, das ich verwende und das alle verschiedenen Binärdateien für verschiedene Versionen auflistet, damit Sie sehen können, wie dies passieren kann: https://github.com/lovell/sharp/tree/v0.25.3
Ich entwickle in Electron und verwende für Electron einen Befehl wie diesen, um die richtige Version von Electron zu erhalten, npm rebuildgegen die ausgeführt werden kann.
npm rebuild --runtime=electron --target=8.5.3 --disturl=https://atom.io/download/atom-shell
Ich weiß nicht genau, was das Äquivalent für einen einfachen Knoten ist, aber lassen Sie mich wissen, ob dies Sie näher bringt und wenn ja, werde ich sehen, was ich finden kann.
Hey) Ich denke ich kann dein Problem lösen, versuche es einfach so:
"engines": {
"node": ">=14.0.0"
},
zu Ihrer package.json und entfernen Sie node_modules und führen Sie npm i in Ihrem Projektverzeichnis aus. Es sollte helfen