Knoten - wurde mit NODE_MODULE_VERSION 51 gegen eine andere Node.js-Version kompiliert


140

Ich führe eine Knotenanwendung auf dem Terminal aus. Habe kürzlich ein Upgrade auf Node v8.5.0 durchgeführt, erhalte jedoch den folgenden Fehler:

Error: The module '/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 51. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.Module._extensions..node (module.js:653:18)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/bcrypt.js:6:16)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/tidee/tidee-au/packages/tidee-au-server/node_modules/babel-register/lib/node.js:152:7)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/server/helpers/encryptPass.js:1:16)

Irgendeine Idee, wie man das löst?


Bitte markieren Sie die richtige Antwort
Shanika Ediriweera

Antworten:


118

Sie müssen den Modulordner ( bcrypt) aus dem node_modulesOrdner entfernen und neu installieren. Verwenden Sie dazu die folgenden Befehle:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn

7
Funktioniert nicht Für mich liegt das Problem beim zmqPaket, und das npm installingerneute Erstellen oder Löschen hilft nicht weiter. Immer das gleiche Problem.
trusktr

6
@trusktr Versuchen Sie, den Ordner node_modules vollständig zu löschen : rm -rf node_modules. npm cache clearLeeren Sie den npm- Cache: Entfernen Sie package-lock.json oder npm-shrinkwrap.json. Und erst danach npm i.
Alexmac

1
Ich habe eine nette Nachricht erhalten: "Ich hoffe, Sie wissen, was Sie tun." als ich diesen Cache gelöscht habe. Ich nicht so sehr, aber anscheinend tust du es! Es funktionierte.
Ouflak

Sie müssen / müssen nicht npm cache clear, die anderen Befehle haben es geschafft
caub

Hat für mich gearbeitet! Mein genauer Fehler war: "Das Modul '/ Users / <Benutzername> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node' wurde mit NODE_MODULE_VERSION 64 gegen eine andere Node.js-Version kompiliert."
Theusual

72

Ich hatte das gleiche Problem und nichts , was hier erwähnt wurde, funktionierte für mich. Folgendes hat bei mir funktioniert:

  1. Benötigen Sie alle Abhängigkeiten, die Sie in der main.jsDatei benötigen , die von Electron ausgeführt wird. (Dies schien der erste wichtige Teil für mich zu sein)
  2. Führen Sie npm i -D electron-rebuilddas hinzufügen Elektron-rebuild Paket
  3. Entfernen Sie den node-modulesOrdner sowie die packages-lock.jsonDatei.
  4. Führen Sie aus npm i, um alle Module zu installieren.
  5. Führen Sie ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdfür Windows) aus, um alles neu zu erstellen

Es ist sehr wichtig , ./node_modules/.bin/electron-rebuilddirekt danach zu laufen, npm ida es sonst auf meinem Mac nicht funktioniert hat.

Ich hoffe, ich konnte einigen frustrierten Seelen helfen.


2
Nur die Elektronenrekonstruktion durchzuführen, hat den Job für mich erledigt. In meinem Fall müssen keine Module gelöscht und neu installiert werden.
stoefln

1
Na dann hast du Glück gehabt @stoefln leider ist es entscheidend, in einigen Setups genau diese Schritte nacheinander zu befolgen.
Chitzui

1
Ich bin unter Windows, aber diese Lösung hat auch bei mir funktioniert. Können Sie erklären, was dieses Problem verursacht? Könnte dies ein Fehler bei Electron sein?
jbinvnt

@jbinvnt ja, es ist bekannt, Elektronenbegrenzung github.com/SimulatedGREG/electron-vue/issues/872
Konstantin Vdovkin

Wie man nur einen Elektronenaufbau über eine Pipeline oder einen Befehl
ausführt

57

Sie müssen das Paket neu erstellen und npm anweisen, auch die Binärdatei zu aktualisieren . Versuchen:

npm rebuild bcrypt --update-binary

@robertklep beantwortet eine relative Frage mit diesem Befehl sehen .

Nur die Neuerstellung hat mein Problem nicht gelöst. Dies funktioniert in meiner Anwendung einwandfrei.

Ich hoffe es hilft!


1
Ich dachte, dass der Zweck der Neuerstellung darin bestand, die Binärdatei zu aktualisieren. Wann möchten Sie die Neuerstellung ohne Aktualisierung der Binärdatei neu erstellen?
Bobmoff

1
@bobmoff Ich dachte auf die gleiche Weise, als ich versuchte, nur die Neuerstellung zu verwenden. Die Dokumente sagen, dass sie alles für uns aktualisieren. Aber nur Fehler. Mein Problem bestand darin, mein altes funktionierendes lokales Repository mit einer neuen lokalen NodeJS / NPM-Version zu synchronisieren. Also habe ich mich umgesehen und "--update-binary" war der Weg, um zu sagen, dass es wirklich erzwungen und geändert werden soll, wie es mit dem natürlichen Wiederaufbau zu tun hat.
RPichioli

30

Einfach ausführen:

npm uninstall bcrypt

Gefolgt von:

npm install bcrypt(oder npm installwenn bcrypt in Ihrer package.json- Datei als Abhängigkeit deklariert ist)


13

Sie können diesen Link sehen

um die Überprüfung Ihres Knotens zu überprüfen. Die Verwendung von NODE_MODULE_VERSION 51 bedeutet, dass Ihre Knotenversion nodejs v7.x ist. NODE_MODULE_VERSION 57 bedeutet, dass Sie Ihren Knoten auf v8.x aktualisieren müssen, sodass Sie Ihren Knoten aktualisieren müssen. Anschließend müssen Sie den npm rebuildBefehl run ausführen , um Ihr Projekt neu zu erstellen


3
Die Antwort selbst sollte ohne den Link hilfreich sein.
Tobias Wilfert

Hatte ein ähnliches Problem, als ich mich von 67 auf 57 beschwerte. In meinem Fall habe ich in Ubuntu ein Downgrade von 11/stableauf 8/stablemit durchgeführt $ snap refresh node --channel=8/stable. Danach tat $ npm rebuild.
Daniel

Diese Antwort ist falsch. NODE_MODULE_VERSION 51bedeutet, dass die .nodeDatei mit NODE_MODULE_VERSION 51 gegen eine Knotenversion kompiliert wird. Der Benutzer verwendet eine Knotenversion mit 57, sodass er sie nicht direkt verwenden kann. Der Benutzer sollte die Kompilierung neu erstellen.
Alsotang

11

Höchstwahrscheinlich haben Sie dieses Problem aufgrund der package-lock.json. Irgendwie scheint es Sie daran zu hindern, Ihre Abhängigkeiten neu zu kompilieren oder neu zu erstellen, selbst wenn Sie explizit ausführen npm rebuild. Ich habe alle folgenden Schritte ausgeführt, um das Problem für mich zu beheben:

rm package-lock.json;
rm -rf node_modules;
npm install;

10

Stellen Sie sicher, dass nur eine Version von NodeJS installiert ist. Probieren Sie diese beiden aus:

node --version
sudo node --version

Ich habe NodeJS ursprünglich von der Quelle installiert, aber es war die falsche Version und wurde mit auf die neueste Version 'aktualisiert' nvm, wodurch keine früheren Versionen entfernt werden und nur die gewünschte Version im /root/.nvm/versions/...Verzeichnis installiert wird . Also sudo nodezeigte immer noch auf die vorherige Version, während nodeauf die neuere Version zeigte.


gah! Warum habe ich nicht daran gedacht! Danke fürs posten, damit ich facepalm kann.
Labyrinth

3

Ich habe den gleichen Fehler erhalten, aber ich habe versucht, eine Knotenanwendung mit einem Docker-Container auszuführen.

Ich habe das Problem behoben, indem ich eine .dockerignore-Datei hinzugefügt habe, um das Verzeichnis node_modules zu ignorieren und sicherzustellen, dass beim Erstellen des Docker-Images die nativen Pakete für das gewünschte Image (Alpine) erstellt werden, anstatt über die für meinen Host kompilierten node_modules (Debian) zu kopieren. .


Arbeitete für mich ... fügte hinzu: node_modules/undpackage-lock.json
Giovanne Afonso

3

Es stellte sich heraus, dass mein Problem ein Benutzerfehler war: Stellen Sie sicher, dass die Version des Knotens, den Sie zum Ausführen verwenden, dieselbe ist, die Sie beim Ausführen einer npm-Installation oder eines Garns verwenden.

Ich verwende NVM für die Versionierung des Knotens und habe Garn über ein Terminal ausgeführt, aber meine IDE wurde so eingestellt, dass beim Ausführen eine ältere Version des Knotens verwendet wird, und es wurde der obige Fehler ausgegeben. Das Problem wurde behoben, indem die Version des Knotens meiner IDE in der Ausführungskonfiguration an die Knotenversion angepasst wurde.


1

Ich hatte ein ähnliches Problem mit robotjs. Es gab einige veraltete Codes, für die der Knoten v11 erforderlich war, aber ich hatte bereits den Elektronencode auf v12 kompiliert. Also habe ich im Grunde den gleichen Fehler bekommen. Hier funktionierte nichts, da ich im Grunde versuchte, das Elektron und meine anderen Abhängigkeiten von v12 in den Knoten v11 umzuwandeln.

Folgendes habe ich getan (ein Teil davon basiert auf der Antwort von Chitzui, Kredit, wo Kredit fällig ist):

  • Sichern Sie package.json
  • Löschen Sie den Ordner node_modules vollständig
  • Löschen Sie package_lock.json vollständig
  • delete package.json (wird später erneut gestartet)
  • Schließen Sie alle geöffneten Editoren und anderen Cmd-Fenster, die sich im Projektverzeichnis befinden.
  • Führen Sie npm initdas Programm aus, um es erneut zu starten, und fehlen Sie dann die Daten mit der alten gesicherten package.json
  • Lauf npm i
  • Fest :)

Hoffe das hilft.


1

Installieren Sie für Elektronenmodule die Elektronenwiederherstellung.

Format:
electron-rebuild -o <module_name> -v <electron version>

Example:
electron-rebuild -o myaddon -v 9.0.0-beta.6

Geben Sie dieselbe Version an, die Sie im aktuellen Verzeichnis installiert haben

Möglicherweise haben Sie diese Erfahrung gemacht, bei der ein Standard-Node-Gyp-Build als 64 und ein grundlegender Elektronen-Rebuild als 76 gemeldet wird. Erst wenn Sie -v mit der genauen Version hinzufügen, wird die tatsächliche Version 80 (für 9.0.0-Beta) erreicht. 6)


1

Ich habe den Ordner node_modules gelöscht und ausgeführt, npm installund meine Anwendung wurde ohne Fehler gestartet.


0

Ich habe diesen Fehler beim Ausführen meiner App mit systemd erhalten:

ExecStart=/usr/local/bin/node /srv/myapp/server.js

Aber ich habe eine andere Version für npm installin der Shell verwendet:

$ which node
/home/keith/.nvm/versions/node/v8.9.0/bin/node

Wenn dies Ihr Setup ist, können Sie entweder die Knotenversion in der Servicedatei fest codieren oder eine Problemumgehung wie diese befolgen .


0

Nachdem ich verschiedene Dinge ausprobiert habe. Das hat funktioniert.

Löschen Sie Ihren Knotenmodulordner und führen Sie ihn aus

npm i

0

Ich hatte das gleiche Problem mit dem grpc-Modul und in meinem Fall habe ich Elektron verwendet und in der env-Variablen "export npm_config_target = 1.2.3" eine falsche Elektronenversion festgelegt. Dabei wurde das Problem auf die von mir verwendete Elektronenversion behoben mein Ende. Ich hoffe, dies hilft jemandem, der die hier angegebenen env-Variablen festlegt ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way ).


0

Sie können bcrypt vollständig entfernen und bcryptjs installieren. Es ist ~ 30% langsamer, hat aber keine Abhängigkeiten, so dass es keine Probleme bei der Installation gibt.

npm i -S bcryptjs && npm uninstall -S bcrypt

Wir haben es erfolgreich für unsere Anwendungen installiert. Wir hatten Probleme damit, dass bcrypt nicht auf AWS-Instanzen für Node v8.x kompiliert wurde


0

Möglicherweise verursacht die Inkonsistenz der JS-Versionen des Knotens das Problem. Wie in der Dokumentation angegeben . Stellen Sie sicher, dass Sie eine der lts-Versionen verwenden. Geben Sie dies beispielsweise in Ihrer Docker-Datei an:

# Pull lts from docker registry
FROM node:8.12.0

# ...

0

Überprüfen Sie, ob die von Ihnen verwendete Knotenversion möglicherweise nicht mit den erwarteten übereinstimmt.


0

Ich hatte das gleiche Problem und keine dieser Lösungen hat funktioniert und ich weiß nicht warum, sie haben in der Vergangenheit für ähnliche Probleme bei mir funktioniert.

Um das Problem zu lösen, habe ich das Paket einfach manuell mit Node-Pre-Gyp neu erstellt

cd node_modules/bcrypt
node-pre-gyp rebuild

Und alles hat wie erwartet funktioniert.

Hoffe das hilft


0

Ich habe gerade diesen Fehler beim Ausführen von kadence erhalten Das installierte "kadence" -Skript sucht zuerst nach nodejs und führt node nur aus, wenn keine nodejs vorhanden sind. Ich habe die neueste Version von node in meinem ~ / bin-Verzeichnis verlinkt, aber nodejs führt eine ältere Version aus, die ich vergessen hatte zu deinstallieren, aber bis jetzt keine Probleme verursacht habe.

Leute mit diesem Problem könnten also prüfen, ob node und nodejs tatsächlich dieselbe Version von node ausführen ...


0

In meinem Fall befand ich mich in meinem Büro-Proxy, der einige der Pakete übersprang. Als ich aus meinem Büro-Proxy kam und versuchte, npm installes zu tun , funktionierte es. Vielleicht hilft das jemandem.

Aber ich habe mehrere Stunden gebraucht, um herauszufinden, dass dies der Grund war.


0

In meinem Fall rannte ich nodejsstatt node. Aufgrund nodejsder Installation durch den Paketmanager:

# which node
/home/user/.nvm/versions/node/v11.6.0/bin/node

# which nodejs
/usr/bin/nodejs

0

renne npm config set python python2.7und renne npm installwieder die Party ist eröffnet.


0

Sie müssen nur die folgenden Befehle ausführen:

$ rm -rf node_modules
$ rm -rf yarn.lock
$ yarn install

und schlussendlich

$ ./node_modules/.bin/electron-rebuild

Vergessen Sie nicht, yarn add electron-rebuildwenn es in Ihren Abhängigkeiten nicht vorhanden ist.


0

Ich habe diesen Fehler zweimal in einer Elektronen-App festgestellt und es stellte sich heraus, dass das Problem darin bestand, dass einige Module aus dem Hauptprozess und nicht aus dem Renderprozess verwendet werden müssen. Der Fehler trat bei Verwendung von pdf2json und auch Node-Canvas auf. Durch Verschieben des Codes, für den diese Module erforderlich waren, von index.htm (dem Renderprozess) nach main.js (dem Hauptprozess) wurde der Fehler behoben, und die App wurde neu erstellt und lief einwandfrei. Dies wird das Problem nicht in allen Fällen beheben, aber es ist das erste, was Sie überprüfen, ob Sie eine Elektronen-App schreiben und auf diesen Fehler stoßen.


0

Hier ist, was für mich funktioniert hat. Ich verwende ein Loop-Back- Knotenmodul mit Electron Js und habe dieses Problem festgestellt. Nachdem ich viele Dinge ausprobiert hatte, funktionierte das Folgende für mich.

Fügen Sie in Ihrer Datei package.json in den Skripten die folgenden Zeilen hinzu:

  ... 
"scripts": {
        "start": "electron .",
        "rebuild": "electron-rebuild"
    
      },
...

Führen Sie dann den folgenden Befehl aus npm run rebuild

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.