Node - a été compilé avec une version différente de Node.js à l'aide de NODE_MODULE_VERSION 51

142

J'exécute une application de nœud sur le terminal. J'ai récemment mis à niveau vers le nœud v8.5.0, mais j'obtiens cette erreur:

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)

Aucune idée sur la façon de résoudre ça?

JoeTidee
la source
Veuillez marquer la bonne réponse
Shanika Ediriweera

Réponses:

119

Vous devez supprimer le dossier du module ( bcrypt) du node_modulesdossier et le réinstaller, utilisez les commandes suivantes:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn
Alexmac
la source
7
Ça ne marche pas. Pour moi, le problème est avec le zmqpaquet, et le reconstruire ou le supprimer et npm installingencore une fois n'aide pas. Toujours le même problème.
trusktr
7
@trusktr Essayez de supprimer node_modules dossier complètement: rm -rf node_modules. Effacer le cache npm npm cache clear:, supprimez package-lock.json ou npm-shrinkwrap.json. Et seulement après cette course npm i.
alexmac
1
Vous avez un joli message, "J'espère vraiment que vous savez ce que vous faites." quand j'ai fait ce cache vide. Moi pas tellement, mais apparemment tu fais! Ça a marché.
ouflak le
vous n'avez / jamais besoin de le faire npm cache clear, les autres commandes l'ont fait
caub
A travaillé pour moi! Mon erreur exacte était - "Le module '/ Users / <username> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node' a été compilé avec une version différente de Node.js en utilisant NODE_MODULE_VERSION 64."
theusual
73

J'ai eu le même problème et rien de mentionné ici n'a fonctionné pour moi. Voici ce qui a fonctionné pour moi:

  1. Exigez toutes les dépendances dont vous avez besoin dans le main.jsfichier géré par électron. (cela m'a semblé être la première partie importante pour moi)
  2. Exécutez npm i -D electron-rebuildpour ajouter le package de reconstruction d'électrons
  3. Supprimez le node-modulesdossier, ainsi que le packages-lock.jsonfichier.
  4. Exécutez npm ipour installer tous les modules.
  5. Exécutez ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdpour Windows) pour tout reconstruire

Il est très important d'exécuter ./node_modules/.bin/electron-rebuilddirectement après npm isinon cela ne fonctionnait pas sur mon mac.

J'espère que je pourrais aider certaines âmes frustrées.

chitzui
la source
2
Le simple fait d'exécuter la reconstruction d'électrons a fait le travail pour moi. Pas besoin de supprimer et de réinstaller des modules dans mon cas.
stoefln
1
Eh bien, vous avez de la chance @stoefln, malheureusement, il est crucial de suivre ces étapes exactes une par une dans certaines configurations.
chitzui
1
Je suis sous Windows, mais cette solution a également fonctionné pour moi. Pouvez-vous expliquer ce qui cause ce problème? Cela pourrait-il être un bug avec Electron?
jbinvnt
@jbinvnt oui, c'est connu Limitation d'électrons github.com/SimulatedGREG/electron-vue/issues/872
Konstantin Vdovkin
Comment exécuter uniquement la reconstruction d'électrons via un pipeline ou toute commande
Kirataka
58

Vous devez reconstruire le paquet et dire à npm de mettre à jour son binaire également . Essayer:

npm rebuild bcrypt --update-binary

@robertklep a répondu à une question relative avec cette commande, regardez .

Seule la reconstruction n'a pas résolu mon problème, cela fonctionne bien dans mon application.

J'espère que ça aide!

RPichioli
la source
1
Je pensais que le but de la reconstruction était de mettre à jour le binaire, quand souhaitez-vous reconstruire SANS mettre à jour le binaire?
bobmoff
1
@bobmoff Je pensais de la même manière en essayant de n'utiliser que la reconstruction, la documentation dit qu'ils mettent tout à jour pour nous .. mais seulement des erreurs - Mon problème était de synchroniser mon dépôt local de travail hérité avec une nouvelle version locale de NodeJS / NPM. J'ai donc regardé autour de moi et "--update-binary" était le moyen de lui dire de vraiment forcer et de le changer comme il le fallait avec la reconstruction naturelle.
RPichioli
30

Exécutez simplement:

npm uninstall bcrypt

Suivi par:

npm install bcrypt(ou npm install, si bcrypt est déclaré comme dépendance dans votre fichier package.json )

Frosty Z
la source
13

vous pouvez voir ce lien

pour vérifier la bonne version de votre nœud. l'utilisation de NODE_MODULE_VERSION 51 signifie que la version de votre nœud est nodejs v7.x, nécessite NODE_MODULE_VERSION 57 signifie que vous devez mettre à niveau votre nœud vers la v8.x, vous devez donc mettre à niveau votre nœud. puis vous devez exécuter la npm rebuildcommande pour reconstruire votre projet

chaulage gao
la source
3
La réponse elle-même devrait être utile sans le lien.
Tobias Wilfert le
Eu un problème similaire se plaignant de 67 à 57. Dans mon cas, je rétrograde de 11/stableà 8/stableavec $ snap refresh node --channel=8/stabledans Ubuntu. Après cela a fait $ npm rebuild.
Daniel
Cette réponse est fausse. NODE_MODULE_VERSION 51signifie que le .nodefichier est compilé avec une version de nœud en utilisant NODE_MODULE_VERSION 51. Et l'utilisateur utilise une version de nœud utilisant 57, il ne peut donc pas l'utiliser directement. L'utilisateur doit reconstruire la compilation.
également
11

Vous rencontrez probablement ce problème en raison du package-lock.json. D'une manière ou d'une autre, cela semble vous empêcher de recompiler ou de reconstruire vos dépendances, même si vous exécutez explicitement npm rebuild. J'ai couru tout ce qui suit pour le réparer pour moi:

rm package-lock.json;
rm -rf node_modules;
npm install;
smets.kevin
la source
10

Assurez-vous qu'une seule version de NodeJS est installée. Essayez ces deux:

node --version
sudo node --version

J'ai initialement installé NodeJS à partir de la source, mais c'était la version incorrecte et `` mis à niveau '' vers la version la plus récente en utilisant nvm, ce qui ne supprime aucune version précédente, et installe uniquement la version souhaitée dans le /root/.nvm/versions/...répertoire. Donc sudo node, il indiquait toujours la version précédente, tout en nodeindiquant la version la plus récente.

Barkles
la source
gah! Pourquoi n'y ai-je pas pensé! Merci d'avoir posté pour que je puisse facepalm.
labyrinthe
3

J'ai eu la même erreur mais j'essayais d'exécuter une application de nœud à l'aide d'un conteneur Docker.

Je l'ai corrigé en ajoutant un fichier .dockerignore pour ignorer le répertoire node_modules pour m'assurer que lorsque l'image docker se construit, il construit les packages natifs pour l'image que je voulais (Alpine) au lieu de copier sur les node_modules compilés pour mon hôte (Debian) .

Mat
la source
A travaillé pour moi ... ajouté: node_modules/etpackage-lock.json
Giovanne Afonso
3

Il s'avère que mon problème était une erreur utilisateur: assurez-vous que la version du nœud que vous utilisez pour l'exécution est la même que celle que vous utilisez lors de l'exécution d'une installation ou d'un fil npm.

J'utilise NVM pour le nœud de versionnage et j'exécutais du fil via un terminal, mais mon IDE était configuré pour utiliser une version plus ancienne du nœud lors de l'exécution et il lançait l'erreur ci-dessus. Faire correspondre la version de node de mon IDE dans la configuration d'exécution à node --version a résolu le problème.

Craig Odell
la source
1

J'ai eu un problème similaire avec robotjs. Il y avait du code obsolète qui nécessitait le nœud v11, mais j'avais déjà compilé du code électronique sur la v12. J'ai donc eu fondamentalement la même erreur. Rien ici n'a fonctionné car j'essayais essentiellement de reconstruire l'électron et mes autres dépendances dans le nœud v11 à partir de la v12.

Voici ce que j'ai fait (une partie de ceci est basée sur la réponse de chitzui, crédit où le crédit est dû):

  • Sauvegarder package.json
  • supprimer complètement le dossier node_modules
  • supprimer complètement package_lock.json
  • supprimer package.json (se réinitialisera plus tard)
  • Fermez tous les éditeurs ouverts et autres fenêtres cmd qui se trouvent dans le répertoire du projet.
  • exécuter npm initpour réinitialiser le package, puis les données manquantes avec l'ancien package.json sauvegardé
  • courir npm i
  • corrigé :)

J'espère que cela t'aides.

AirFusion
la source
1

Pour les modules Electron, installez la reconstruction d'électrons.

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

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

Spécifiez la même version que vous avez installée dans le répertoire actuel

Vous pourriez avoir cette expérience où une construction standard de node-gyp rapporterait comme 64, puis une reconstruction électronique de base rapporterait 76, pas jusqu'à ce que vous ajoutiez -v avec la version exacte qu'elle passe à la version actuelle 80 (pour 9.0.0-beta. 6)

tomm1e
la source
1

J'ai supprimé le dossier node_modules et exécuté npm installet mon application a démarré sans aucune erreur.

Dushan
la source
0

J'ai eu cette erreur lors de l'exécution de mon application avec systemd:

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

Mais j'utilisais une version différente pour npm installdans le shell:

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

Si c'est votre configuration, vous pouvez coder en dur la version du nœud dans le fichier de service ou suivre une solution de contournement comme celle-ci .

Keith
la source
0

Après avoir essayé différentes choses. Cela a fonctionné.

Supprimez votre dossier de modules de nœuds et exécutez

npm i
Ankit Pandey
la source
0

J'ai rencontré le même problème avec le module grpc et dans mon cas, j'utilisais electron et j'ai défini une mauvaise version d'électrons dans la variable env "export npm_config_target = 1.2.3", en le définissant sur la version électronique que j'utilise, le problème est résolu sur ma fin. J'espère que cela aidera quelqu'un qui définit les variables d'environnement comme indiqué ici ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way )

khôl
la source
0

Vous pouvez supprimer complètement bcrypt et installer bcryptjs. Il est ~ 30% plus lent, mais n'a pas de dépendances, donc pas de peine à l'installer.

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

Nous l'avons installé avec succès pour nos applications. Nous avons eu des problèmes avec bcrypt ne compilant pas sur les instances AWS pour Node v8.x

Daniel Nitu
la source
0

Potentiellement, l'incohérence des versions du nœud JS est ce qui cause le problème. Comme indiqué dans la documentation . Assurez-vous d'utiliser l'une des versions lts. Par exemple, spécifiez ceci dans votre Dockerfile:

# Pull lts from docker registry
FROM node:8.12.0

# ...
kmos.w
la source
0

Vérifiez la version du nœud que vous utilisez, il peut s'agir d'une incompatibilité entre ce à quoi elle est attendue.

cjjenkinson
la source
0

J'ai eu le même problème et aucune de ces solutions n'a fonctionné et je ne sais pas pourquoi, elles ont fonctionné pour moi dans le passé pour des problèmes similaires.

Quoi qu'il en soit, pour résoudre le problème, je viens de reconstruire manuellement le paquet en utilisant node-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

Et tout a fonctionné comme prévu.

J'espère que cela t'aides

wezzy
la source
0

Je viens de recevoir cette erreur en exécutant kadence, le script "kadence" installé vérifie d'abord nodejs et n'exécute node que s'il n'y a pas de nodejs. J'ai la dernière version de node liée dans mon répertoire ~ / bin mais nodejs exécute une version plus ancienne que j'avais oublié de désinstaller mais qui n'a jamais causé de problèmes jusqu'à maintenant.

Les personnes ayant ce problème peuvent donc vérifier si node et nodejs exécutent réellement la même version de node ...

Bill Burdick
la source
0

Dans mon cas, j'étais dans mon proxy de bureau qui sautait certains des paquets. Quand je suis sorti de mon bureau et que j'ai essayé de le faire, npm installcela a fonctionné. Peut-être que cela aide quelqu'un.

Mais il m'a fallu plusieurs heures pour identifier que c'était la raison.

Balasubramanien S
la source
0

Dans mon cas, je courais nodejsau lieu de node. En raison de l' nodejsinstallation par le gestionnaire de paquets:

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

# which nodejs
/usr/bin/nodejs
portforwardpodcast
la source
0

courir npm config set python python2.7et courir à npm installnouveau, la fête est lancée .

Tebogo Mahlalela
la source
0

il vous suffit d'exécuter les commandes ci-dessous:

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

et enfin

$ ./node_modules/.bin/electron-rebuild

n'oubliez pas yarn add electron-rebuilds'il n'existe pas dans vos dépendances.

Ehsan Barkhordar
la source
0

J'ai rencontré cette erreur deux fois dans une application d'électrons et il s'est avéré que le problème était que certains modules devaient être utilisés à partir du processus principal plutôt que du processus de rendu. L'erreur s'est produite en utilisant pdf2json et également node-canvas. Le déplacement du code qui nécessitait ces modules de index.htm (le processus de rendu) vers main.js (le processus principal) a corrigé l'erreur et l'application a été reconstruite et s'est parfaitement déroulée. Cela ne résoudra pas le problème dans tous les cas, mais c'est la première chose à vérifier si vous écrivez une application électronique et si vous rencontrez cette erreur.

Prajna
la source
0

Voici ce qui a fonctionné pour moi. J'utilise un module de nœud en boucle avec Electron Js et j'ai rencontré ce problème. Après avoir essayé beaucoup de choses, la suite a fonctionné pour moi.

Dans votre fichier package.json dans les scripts, ajoutez les lignes suivantes:

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

Et puis exécutez la commande suivante npm run rebuild

sediq khan
la source