Nó - foi compilado em uma versão diferente do Node.js. usando NODE_MODULE_VERSION 51

142

Estou executando um aplicativo de nó no terminal. Atualizei recentemente para o nó v8.5.0, mas estou recebendo este erro:

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)

Alguma idéia de como resolver isso?

JoeTidee
fonte
Por favor, marque a resposta correta
Shanika Ediriweera

Respostas:

119

Você precisa remover a pasta do módulo ( bcrypt) da node_modulespasta e reinstalá-la, use os seguintes comandos:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn
alexmac
fonte
7
Não funciona Para mim, o problema está no zmqpacote, e reconstruí-lo ou excluí-lo e npm installingtudo de novo não ajuda. Sempre o mesmo problema.
trusktr
7
@trusktr Tente excluir a pasta completamente node_modules: rm -rf node_modules. Limpar cache do npm:, npm cache clearremova package-lock.json ou npm-shrinkwrap.json. E somente depois dessa corrida npm i.
Alexmac
1
Recebi uma boa mensagem: "Espero que você saiba o que está fazendo". quando limpei esse cache. Eu não tanto, mas aparentemente você faz! Funcionou.
ouflak
você não / nunca precisa npm cache clear, os outros comandos o fizeram
caub
Trabalhou para mim! Meu erro exato foi - "O módulo '/ Usuários / <nome do usuário> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node' foi compilado em uma versão diferente do Node.js. usando NODE_MODULE_VERSION 64."
theusual 16/04/19
73

Eu tive o mesmo problema e nada mencionado aqui funcionou para mim. Aqui está o que funcionou para mim:

  1. Exija todas as dependências necessárias no main.jsarquivo que é executado por elétron. (esta parecia ser a primeira parte importante para mim)
  2. Execute npm i -D electron-rebuildpara adicionar o pacote de reconstrução de elétrons
  3. Remova a node-modulespasta, bem como o packages-lock.jsonarquivo.
  4. Execute npm ipara instalar todos os módulos.
  5. Execute ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdpara Windows) para reconstruir tudo

É muito importante executar ./node_modules/.bin/electron-rebuilddiretamente depois, npm icaso contrário não funcionaria no meu mac.

Espero poder ajudar algumas almas frustradas.

chitzui
fonte
2
A execução de reconstrução eletrônica fez o trabalho para mim. Não há necessidade de excluir e reinstalar módulos no meu caso.
stoefln
1
Bem, então você teve sorte @stoefln, infelizmente, é crucial seguir essas etapas exatas uma por uma em algumas configurações.
Chitzui
1
Estou no Windows, mas esta solução funcionou para mim também. Você pode explicar o que causa esse problema? Isso poderia ser um bug do Electron?
jbinvnt
@jbinvnt sim, é conhecido como limitação de elétrons github.com/SimulatedGREG/electron-vue/issues/872
Konstantin Vdovkin
Como executar apenas a reconstrução de elétrons através de pipeline ou qualquer comando
Kirataka
57

Você precisa reconstruir o pacote e pedir ao npm para atualizar o seu binário também . Experimentar:

npm rebuild bcrypt --update-binary

@robertklep respondeu uma pergunta relativa com este comando, olhe .

Somente a reconstrução não resolveu meu problema, isso funciona bem no meu aplicativo.

Espero que ajude!

RPichioli
fonte
1
Eu pensei que o objetivo da reconstrução era atualizar o binário, quando você gostaria de reconstruir SEM atualizar o binário?
bobmoff
1
@obmoff Eu estava pensando da mesma maneira tentando usar apenas a reconstrução, os documentos dizem que atualizam tudo para nós .. mas apenas erros - Meu problema foi sincronizar meu repositório local de trabalho herdado para uma nova versão local do NodeJS / NPM. Então eu olhei em volta e "--update-binary" era a maneira de dizer para realmente forçar e mudar da maneira que tem a ver com a reconstrução natural.
RPichioli
30

Basta executar:

npm uninstall bcrypt

Seguido por:

npm install bcrypt(ou npm install, se bcrypt for declarado como dependência no seu arquivo package.json )

Z gelado
fonte
13

você pode ver este link

para verificar seu nó corretamente. usar NODE_MODULE_VERSION 51 significa que sua versão do nó é nodejs v7.x, requer NODE_MODULE_VERSION 57 significa que você precisa atualizar seu nó para a v8.x, portanto, precisa atualizar seu nó. e então você precisa executar o npm rebuildcomando para reconstruir seu projeto

caling gao
fonte
3
A resposta em si deve ser útil sem o link.
Tobias Wilfert
Tive um problema semelhante reclamando de 67 para 57. No meu caso, eu faço o downgrade de 11/stablepara 8/stablecom $ snap refresh node --channel=8/stableno Ubuntu. Depois disso $ npm rebuild.
Daniel
Esta resposta está errada. NODE_MODULE_VERSION 51significa que o .nodearquivo é compilado com base em alguma versão de nó usando NODE_MODULE_VERSION 51. E o usuário está usando uma versão de nó usando 57, portanto, não pode usá-lo diretamente. O usuário deve reconstruir a compilação.
alsotang
11

Provavelmente você tem esse problema devido ao package-lock.json. De alguma forma, parece impedi-lo de recompilar ou reconstruir suas dependências, mesmo se você executar explicitamente npm rebuild. Executei o seguinte para corrigi-lo:

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

Certifique-se de ter apenas uma versão do NodeJS instalada. Experimente estes dois:

node --version
sudo node --version

Inicialmente, instalei o NodeJS a partir da fonte, mas era a versão incorreta e 'atualizei' para a versão mais recente nvm, o que não remove nenhuma versão anterior e apenas instala a versão desejada no /root/.nvm/versions/...diretório. Então, sudo nodeainda estava apontando para a versão anterior, enquanto nodeapontava para a versão mais recente.

Barkles
fonte
gah! Por que eu não pensei nisso! Obrigado por postar para que eu possa facepalm.
labirinto
3

Eu recebi o mesmo erro, mas estava tentando executar um aplicativo de nó usando um contêiner do Docker.

Corrigi-o adicionando um arquivo .dockerignore para ignorar o diretório node_modules para garantir que, quando a imagem do docker for criada, ele construa os pacotes nativos da imagem que eu queria (Alpine) em vez de copiar os node_modules compilados para o meu host (Debian) .

Matt
fonte
Trabalhou para mim ... adicionou: node_modules/epackage-lock.json
Giovanne Afonso
3

Acontece que meu problema foi erro do usuário: verifique se a versão do nó que você está usando para execução é a mesma que você está usando ao executar uma instalação ou fio npm.

Eu uso o NVM para o nó de controle de versão e estava executando o fio através de um terminal, mas meu IDE foi configurado para usar uma versão mais antiga do nó ao executar e estava lançando o erro acima. A correspondência da versão do nó do IDE na execução da configuração com o nó --version corrigiu o problema.

Craig Odell
fonte
1

Eu tive um problema semelhante com o robotjs. Havia algum código obsoleto que exigia o nó v11, mas eu já havia compilado o código eletrônico na v12. Então, eu tenho basicamente o mesmo erro. Nada aqui funcionou, pois eu estava basicamente tentando reconstruir elétrons e minhas outras dependências no nó v11 da v12.

Aqui está o que eu fiz (parte disso é baseada na resposta do chitzui, crédito onde o crédito é devido):

  • Faça backup do package.json
  • exclua completamente a pasta node_modules
  • excluir completamente package_lock.json
  • delete package.json (reinicia mais tarde)
  • Feche todos os editores abertos e outras janelas cmd que estão no diretório do projeto.
  • execute npm initpara reiniciar o pacote e, em seguida, perdendo dados com o antigo pacote de backup.json
  • corre npm i
  • Fixed :)

Espero que isto ajude.

AirFusion
fonte
1

Para módulos Electron, instale electron-reconstruir.

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

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

Especifique a mesma versão que você instalou no diretório atual

Você pode ter essa experiência em que uma compilação node-gyp padrão reportaria como 64 e, em seguida, uma reconstrução básica de elétrons reportaria 76, até que você adicione -v com a versão exata, ela colide com a versão real 80 (para 9.0.0-beta. 6)

tomm1e
fonte
1

Excluí a pasta node_modules e executei npm installe meu aplicativo foi iniciado sem erros.

Dushan
fonte
0

Eu recebi este erro ao executar meu aplicativo com systemd:

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

Mas eu estava usando uma versão diferente para npm installno shell:

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

Se essa for sua configuração, você pode codificar a versão do nó no arquivo de serviço ou seguir uma solução alternativa como esta .

Keith
fonte
0

Depois de tentar coisas diferentes. Isso funcionou.

Exclua a pasta de módulos do nó e execute

npm i
Ankit Pandey
fonte
0

Eu enfrentei o mesmo problema com o módulo grpc e, no meu caso, eu estava usando electron e defini uma versão eletrônica incorreta na variável env "export npm_config_target = 1.2.3", configurando-a para a versão eletrônica que estou usando, resolveu o problema em meu fim. Espero que isso ajude alguém que defina variáveis ​​env como indicado aqui ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way )

Kohl
fonte
0

Você pode remover completamente o bcrypt e instalar o bcryptjs. É ~ 30% mais lento, mas não possui dependências, portanto, não é necessário instalá-lo.

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

Instalamos com sucesso para nossos aplicativos. Tivemos problemas com o bcrypt não compilando nas instâncias da AWS para o Node v8.x

Daniel Nitu
fonte
0

Potencialmente, a inconsistência das versões JS do nó é o que causa o problema. Conforme indicado na documentação . Certifique-se de usar uma das versões lts. Por exemplo, especifique isso em seu Dockerfile:

# Pull lts from docker registry
FROM node:8.12.0

# ...
kmos.w
fonte
0

Verifique a versão do nó que você está usando, pode ser uma incompatibilidade entre o que é esperado.

cjjenkinson
fonte
0

Eu tive o mesmo problema e nenhuma dessas soluções funcionou e não sei por que, elas funcionaram para mim no passado para problemas semelhantes.

De qualquer forma, para resolver o problema, acabei de reconstruir manualmente o pacote usando o node-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

E tudo funcionou como esperado.

Espero que isto ajude

wezzy
fonte
0

Eu só tenho esse erro executando kadence os instalados "Kadence" script verifica para nodejs primeiro e único é executado nó se não houver nodejs. Eu tenho a versão mais recente do nó vinculada ao meu diretório ~ / bin, mas o nodejs executa uma versão mais antiga que eu esqueci de desinstalar, mas que nunca causou problemas até agora.

Portanto, pessoas com esse problema podem verificar se o node e o nodejs realmente executam a mesma versão do nó ...

Bill Burdick
fonte
0

No meu caso, eu estava no proxy do meu escritório, que estava pulando alguns dos pacotes. Quando saí do proxy do meu escritório e tentei fazê- npm installlo funcionou. Talvez isso ajude alguém.

Mas levei várias horas para identificar que esse era o motivo.

Balasubramanian S
fonte
0

No meu caso, eu estava correndo em nodejsvez de node. Devido à nodejsinstalação do gerenciador de pacotes:

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

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

correr npm config set python python2.7e correr npm installnovamente a festa está ligada.

Tebogo Mahlalela
fonte
0

você precisa apenas executar os comandos abaixo:

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

e finalmente

$ ./node_modules/.bin/electron-rebuild

não esqueça yarn add electron-rebuildse não existir em suas dependências.

Ehsan Barkhordar
fonte
0

Eu encontrei esse erro duas vezes em um aplicativo de elétrons e o problema foi que alguns módulos precisam ser usados ​​no processo principal, e não no processo de renderização. O erro ocorreu usando o pdf2json e também o node-canvas. Mover o código que exigia esses módulos de index.htm (o processo de renderização) para main.js (o processo principal) corrigiu o erro e o aplicativo foi reconstruído e executado perfeitamente. Isso não resolverá o problema em todos os casos, mas é a primeira coisa a verificar se você está escrevendo um aplicativo de elétrons e se deparar com esse erro.

Prajna
fonte
0

Aqui está o que funcionou para mim. Estou usando o módulo de nó em loop-back com Js de elétron e enfrentou esse problema. Depois de tentar muitas coisas a seguir funcionou para mim.

No seu arquivo package.json nos scripts, adicione as seguintes linhas:

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

E então execute o seguinte comando npm run rebuild

sediq khan
fonte