Nodo: se compiló con una versión diferente de Node.js usando NODE_MODULE_VERSION 51

142

Estoy ejecutando una aplicación de nodo en la terminal. Recientemente me actualicé al nodo v8.5.0, pero recibo este error:

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)

Alguna idea de como resolver esto?

JoeTidee
fuente
Marque la respuesta correcta
Shanika Ediriweera

Respuestas:

119

Debe eliminar la carpeta del módulo ( bcrypt) de la node_modulescarpeta y volver a instalarla, use los siguientes comandos:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn
alexmac
fuente
77
No funciona Para mí, el problema es con el zmqpaquete, y reconstruirlo o eliminarlo y npm installingtodo de nuevo no ayuda. Siempre el mismo problema.
trusktr
77
@trusktr Intente eliminar por completo node_modules carpeta: rm -rf node_modules. Borre el caché npm: npm cache clearelimine package-lock.json o npm-shrinkwrap.json. Y solo después de esa carrera npm i.
alexmac 01 de
1
Recibí un mensaje agradable: "Espero que sepas lo que estás haciendo". cuando hice ese caché claro. Yo no tanto, pero aparentemente lo haces! Funcionó.
ouflak
no necesita / nunca lo necesita npm cache clear, los otros comandos lo hicieron
caub
¡Trabajó para mi! Mi error exacto fue: "El módulo '/ Users / <username> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node' se compiló en una versión diferente de Node.js usando NODE_MODULE_VERSION 64."
habitual
73

Tuve el mismo problema y nada de lo mencionado aquí funcionó para mí. Esto es lo que funcionó para mí:

  1. Requerir todas las dependencias que necesita en el main.jsarchivo ejecutado por electron. (Esta parecía ser la primera parte importante para mí)
  2. Ejecutar npm i -D electron-rebuildpara agregar el paquete de reconstrucción electrónica
  3. Elimine la node-modulescarpeta, así como el packages-lock.jsonarchivo.
  4. Ejecute npm ipara instalar todos los módulos.
  5. Ejecute ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdpara Windows) para reconstruir todo

Es muy importante ejecutar ./node_modules/.bin/electron-rebuilddirectamente después de lo npm icontrario, no funcionó en mi mac.

Espero poder ayudar a algunas almas frustradas.

chitzui
fuente
2
Solo ejecutar la reconstrucción electrónica hizo el trabajo por mí. No es necesario eliminar y reinstalar módulos en mi caso.
stoefln
1
Bueno, entonces tuvo suerte @stoefln desafortunadamente, es crucial seguir estos pasos exactos uno por uno en algunas configuraciones.
Chitzui
1
Estoy en Windows pero esta solución también me funcionó. ¿Puedes explicar qué causa este problema? ¿Podría ser esto un error con Electron?
jbinvnt
@jbinvnt sí, se sabe Limitación de electrones github.com/SimulatedGREG/electron-vue/issues/872
Konstantin Vdovkin
Cómo ejecutar solo la reconstrucción electrónica a través de una tubería o cualquier comando
Kirataka
57

Tienes que reconstruir el paquete y decirle a npm que actualice también es binario . Tratar:

npm rebuild bcrypt --update-binary

@robertklep respondió una pregunta relativa con este comando, mira .

Solo la reconstrucción no ha resuelto mi problema, esto funciona bien en mi aplicación.

¡Espero eso ayude!

RPichioli
fuente
1
pensé que el propósito de la reconstrucción era actualizar el binario, ¿cuándo le gustaría reconstruir SIN actualizar el binario?
bobmoff
1
@bobmoff Estaba pensando de la misma manera tratando de usar solo reconstruir, los documentos dicen que actualizan todo para nosotros ... pero solo errores: mi problema fue sincronizar mi repositorio local de trabajo heredado con una nueva versión local de NodeJS / NPM. Así que miré a mi alrededor y "--update-binary" era la forma de decirle que realmente forzara y cambiara la forma en que tenía que ver con la reconstrucción natural.
RPichioli
30

Simplemente ejecute:

npm uninstall bcrypt

Seguido por:

npm install bcrypt(o npm install, si bcrypt se declara como dependencia en su archivo package.json )

Z escarchado
fuente
13

puedes ver este enlace

para verificar su nodo verison a la derecha. usar NODE_MODULE_VERSION 51 significa que la versión de su nodo es nodejs v7.x, requiere NODE_MODULE_VERSION 57 significa que necesita actualizar su nodo a v8.x, por lo que necesita actualizar su nodo. y luego necesitas ejecutar el npm rebuildcomando para reconstruir tu proyecto

Gao encalado
fuente
3
La respuesta en sí misma debería ser útil sin el enlace.
Tobias Wilfert
Tuve un problema similar quejándome del 67 al 57. En mi caso, me rebajé de 11/stablea 8/stablecon $ snap refresh node --channel=8/stableUbuntu. Después de eso lo hizo $ npm rebuild.
Daniel
Esta respuesta es incorrecta. NODE_MODULE_VERSION 51significa que el .nodearchivo se compila contra alguna versión de nodo usando NODE_MODULE_VERSION 51. Y el usuario está usando una versión de nodo usando 57, por lo que no puede usarlo directamente. El usuario debe reconstruir la compilación.
alsotang
11

Lo más probable es que tenga este problema debido al paquete-lock.json. De alguna manera, parece que le impide volver a compilar o reconstruir sus dependencias, incluso si ejecuta explícitamente npm rebuild. Ejecuté todo lo siguiente para solucionarlo:

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

Asegúrese de tener solo una versión de NodeJS instalada. Prueba estos dos:

node --version
sudo node --version

Inicialmente instalé NodeJS desde el código fuente, pero fue la versión incorrecta y 'actualicé' a la última versión usando nvm, lo que no elimina ninguna versión anterior, y solo instala la versión deseada en el /root/.nvm/versions/...directorio. Entonces sudo nodetodavía apuntaba a la versión anterior, mientras nodeapuntaba a la versión más nueva.

Barkles
fuente
gah! ¿Por qué no pensé en esto? Gracias por publicar para que pueda facepalm.
laberinto
3

Recibí el mismo error pero estaba tratando de ejecutar una aplicación de nodo usando un contenedor Docker.

Lo arreglé agregando un archivo .dockerignore para ignorar el directorio node_modules para asegurarme de que cuando se construye la imagen de Docker, se compilan los paquetes nativos para la imagen que quería (Alpine) en lugar de copiar sobre los node_modules compilados para mi host (Debian) .

Mate
fuente
Trabajó para mí ... añadido: node_modules/ypackage-lock.json
Giovanne Afonso
3

Resulta que mi problema fue un error del usuario: asegúrese de que la versión del nodo que está utilizando para ejecutar sea la misma que utiliza cuando ejecuta una instalación o hilo npm.

Utilizo NVM para versionar el nodo y estaba ejecutando hilo a través de un terminal, pero mi IDE estaba configurado para usar una versión anterior del nodo cuando se ejecutaba y arrojaba el error anterior. Hacer coincidir la versión de nodo de mi IDE en la configuración de ejecución con el nodo --version solucionó el problema.

Craig Odell
fuente
1

Tuve un problema similar con robotjs. Había un código obsoleto que requería el nodo v11, pero ya había compilado el código electrónico en la v12. Entonces obtuve básicamente el mismo error. Nada funcionó aquí, ya que básicamente estaba tratando de reconstruir el electrón y mis otras dependencias en el nodo v11 desde la v12.

Esto es lo que hice (parte de esto se basa en la respuesta de Chitzui, crédito donde se debe):

  • Copia de seguridad de package.json
  • eliminar completamente la carpeta node_modules
  • eliminar completamente package_lock.json
  • eliminar package.json (se reiniciará más tarde)
  • Cierre todos los editores abiertos y otras ventanas de cmd que estén en el directorio del proyecto.
  • ejecutar npm initpara reiniciar el paquete, luego faltan datos con el antiguo paquete respaldado.json
  • correr npm i
  • fijo :)

Espero que esto ayude.

AirFusion
fuente
1

Para los módulos Electron, instale la reconstrucción electrónica.

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

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

Especifique la misma versión que instaló en el directorio actual

Es posible que tenga esta experiencia en la que una construcción de nodo-gyp estándar informaría como 64, luego una reconstrucción electrónica básica informaría 76, no hasta que agregue -v con la versión exacta que se encuentra con la versión real 80 (para 9.0.0-beta. 6)

tomm1e
fuente
1

Eliminé la carpeta node_modules y la ejecuté npm instally mi aplicación se inició sin ningún error.

Dushan
fuente
0

Recibí este error al ejecutar mi aplicación con systemd:

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

Pero estaba usando una versión diferente para npm installen el shell:

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

Si esta es su configuración, puede codificar la versión del nodo en el archivo de servicio o seguir una solución como esta .

Keith
fuente
0

Después de probar cosas diferentes. Esto funcionó.

Elimine la carpeta de módulos de nodo y ejecute

npm i
Ankit Pandey
fuente
0

Enfrenté el mismo problema con el módulo grpc y en mi caso, estaba usando electron y configuré una versión electrónica incorrecta en la variable env "export npm_config_target = 1.2.3", configurándola en la versión electrónica que estoy usando resolvió el problema en mi fin. Espero que esto ayude a alguien que establece las variables env como se indica aquí ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way )

kohl
fuente
0

Puede eliminar bcrypt por completo e instalar bcryptjs. Es ~ 30% más lento, pero no tiene dependencias, por lo que no le cuesta instalarlo.

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

Lo hemos instalado con éxito para nuestras aplicaciones. Tuvimos problemas con bcrypt que no se compilaba en instancias de AWS para el Nodo v8.x

Daniel Nitu
fuente
0

Potencialmente, la inconsistencia de las versiones del nodo JS es lo que causa el problema. Como se indica en la documentación . Asegúrese de usar uno de los lanzamientos de lts. Por ejemplo, especifique esto en su Dockerfile:

# Pull lts from docker registry
FROM node:8.12.0

# ...
kmos.w
fuente
0

Verifique la versión del nodo que está utilizando, puede ser una falta de coincidencia entre lo que se espera.

cjjenkinson
fuente
0

Tuve el mismo problema y ninguna de estas soluciones funcionó y no sé por qué, en el pasado funcionaron para mí por problemas similares.

De todos modos para resolver el problema, acabo de reconstruir manualmente el paquete usando node-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

Y todo funcionó como se esperaba.

Espero que esto ayude

wezzy
fuente
0

Acabo de recibir este error al ejecutar kadence, el script "kadence" instalado comprueba primero nodejs y solo ejecuta node si no hay nodejs. Tengo la última versión del nodo vinculada a mi directorio ~ / bin pero nodejs ejecuta una versión anterior que olvidé desinstalar pero que nunca causó problemas hasta ahora.

Entonces, las personas con este problema podrían verificar si node y nodejs realmente ejecutan la misma versión del nodo ...

Bill Burdick
fuente
0

En mi caso, estaba en el proxy de mi oficina, que estaba omitiendo algunos de los paquetes. Cuando salí del proxy de mi oficina e intenté hacerlo npm installfuncionó. Quizás esto ayude a alguien.

Pero me llevó varias horas identificar que esa era la razón.

Balasubramanian S
fuente
0

En mi caso, estaba corriendo en nodejslugar de node. Debido a nodejsser instalado por el administrador de paquetes:

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

# which nodejs
/usr/bin/nodejs
portforwardpodcast
fuente
0

corre npm config set python python2.7y corre de npm installnuevo la fiesta está en marcha .

Tebogo Mahlalela
fuente
0

solo necesita ejecutar los siguientes comandos:

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

y finalmente

$ ./node_modules/.bin/electron-rebuild

no olvides yarn add electron-rebuildsi no existe en tus dependencias.

Ehsan Barkhordar
fuente
0

He encontrado este error dos veces en una aplicación electrónica y resultó que el problema era que algunos módulos deben usarse desde el proceso principal en lugar del proceso de renderizado. El error ocurrió usando pdf2json y también node-canvas. Mover el código que requería esos módulos de index.htm (el proceso de renderizado) a main.js (el proceso principal) corrigió el error y la aplicación se reconstruyó y ejecutó perfectamente. Esto no solucionará el problema en todos los casos, pero es lo primero que debe verificar si está escribiendo una aplicación electrónica y se encuentra con este error.

Prajna
fuente
0

Esto es lo que funcionó para mí. Estoy usando un módulo de nodo en bucle con Electron Js y enfrenté este problema. Después de probar muchas cosas, el siguiente trabajo me funcionó.

En su archivo package.json en los scripts, agregue las siguientes líneas:

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

Y luego ejecuta el siguiente comando npm run rebuild

sediq khan
fuente