Węzeł - został skompilowany dla innej wersji Node.js przy użyciu NODE_MODULE_VERSION 51

142

Uruchamiam aplikację węzła na terminalu. Niedawno zaktualizowałem węzeł do wersji 8.5.0, ale otrzymuję ten błąd:

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)

Masz jakiś pomysł, jak to rozwiązać?

JoeTidee
źródło
Proszę zaznaczyć poprawną odpowiedź
Shanika Ediriweera

Odpowiedzi:

119

Musisz usunąć folder modułu ( bcrypt) z node_modulesfolderu i ponownie go zainstalować, użyj następujących poleceń:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn
alexmac
źródło
7
Nie działa. Dla mnie problem jest z zmqpakietem, a odbudowa lub usunięcie go i npm installingod nowa nie pomaga. Zawsze ten sam problem.
trusktr
7
@trusktr Spróbuj usunąć całkowicie node_modules folderu: rm -rf node_modules. Wyczyść pamięć podręczną npm: npm cache clearusuń package-lock.json lub npm-shrinkwrap.json. I dopiero po tym biegu npm i.
alexmac
1
Otrzymałem miłą wiadomość: „Mam nadzieję, że wiesz, co robisz”. kiedy wyczyściłem pamięć podręczną. Ja nie tak bardzo, ale najwyraźniej tak! Zadziałało.
ouflak
nie musisz / nigdy nie musisz npm cache clear, inne polecenia to
zrobiły
Pracował dla mnie! Mój dokładny błąd brzmiał: „Moduł '/ Users / <nazwa użytkownika> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node' został skompilowany do innej wersji Node.js przy użyciu NODE_MODULE_VERSION 64.”
zwykły
73

Miałem ten sam problem i nic, o czym tu wspomniano, nie zadziałało. Oto, co zadziałało dla mnie:

  1. Wymagaj wszystkich zależności, których potrzebujesz w main.jspliku uruchamianym przez electron. (to wydawało się być pierwszą ważną częścią dla mnie)
  2. Uruchom, npm i -D electron-rebuildaby dodać pakiet odbudowy elektronów
  3. Usuń node-modulesfolder oraz packages-lock.jsonplik.
  4. Uruchom, npm iaby zainstalować wszystkie moduły.
  5. Uruchom ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdw systemie Windows), aby wszystko odbudować

Jest bardzo ważne , aby uruchomić ./node_modules/.bin/electron-rebuildbezpośrednio po npm iinaczej to nie działa na moim mac.

Mam nadzieję, że mógłbym pomóc niektórym sfrustrowanym duszom.

chitzui
źródło
2
Samo przeprowadzenie odbudowy elektronu wykonało pracę za mnie. Nie ma potrzeby usuwania i ponownego instalowania modułów w moim przypadku.
stoefln
1
Cóż, masz szczęście @stoefln, niestety ważne jest, aby wykonać te dokładne kroki jeden po drugim w niektórych konfiguracjach.
chitzui
1
Jestem na Windowsie, ale to rozwiązanie również zadziałało. Czy możesz wyjaśnić, co powoduje ten problem? Czy to może być błąd w Electronie?
jbinvnt
@jbinvnt tak, wiadomo Ograniczenie elektronów github.com/SimulatedGREG/electron-vue/issues/872
Konstantin Vdovkin
Jak przeprowadzić przebudowę tylko elektronów przez potok lub dowolne polecenie
Kirataka
57

Musisz odbudować pakiet i powiedzieć npm, aby zaktualizował również plik binarny . Próbować:

npm rebuild bcrypt --update-binary

@robertklep odpowiedział na względne pytanie za pomocą tego polecenia, spójrz .

Tylko przebudowa nie rozwiązała mojego problemu, to działa dobrze w mojej aplikacji.

Mam nadzieję, że to pomoże!

RPichioli
źródło
1
Pomyślałem, że celem przebudowy było zaktualizowanie pliku binarnego, kiedy chciałbyś odbudować BEZ aktualizacji pliku binarnego?
bobmoff
1
@bobmoff Myślałem w ten sam sposób, próbując użyć tylko przebudowy, dokumentacja mówi, że aktualizują wszystko dla nas .. ale tylko błędy - Moim problemem było zsynchronizowanie mojego starego, działającego lokalnego repozytorium z nową lokalną wersją NodeJS / NPM. Rozejrzałem się więc dookoła i "--update-binary" było sposobem na to, żeby naprawdę wymusić i zmienić to tak, jak ma to do czynienia z odbudową w sposób naturalny.
RPichioli
30

Po prostu uruchom:

npm uninstall bcrypt

Śledzony przez:

npm install bcrypt(lub npm install, jeśli bcrypt jest zadeklarowany jako zależność w pliku package.json )

Frosty Z
źródło
13

możesz zobaczyć ten link

aby sprawdzić poprawną wersję swojego węzła. używanie NODE_MODULE_VERSION 51 oznacza, że ​​wersja twojego węzła to nodejs v7.x, wymaga NODE_MODULE_VERSION 57 oznacza, że ​​musisz zaktualizować swój węzeł do v8.x, więc musisz zaktualizować swój węzeł. a następnie musisz uruchomić npm rebuildpolecenie, aby odbudować projekt

wapnowanie gao
źródło
3
Sama odpowiedź powinna być pomocna bez linku.
Tobias Wilfert
Podobny problem miałem narzekając z 67 na 57. W moim przypadku w Ubuntu obniżam wersję z 11/stablena 8/stablez $ snap refresh node --channel=8/stable. Po tym zrobił $ npm rebuild.
Daniel
Ta odpowiedź jest błędna. NODE_MODULE_VERSION 51oznacza, że .nodeplik jest kompilowany dla jakiejś wersji węzła przy użyciu NODE_MODULE_VERSION 51. A użytkownik używa wersji węzła używającej 57, więc nie może jej używać bezpośrednio. Użytkownik powinien odbudować kompilację.
alsotang
11

Najprawdopodobniej masz ten problem z powodu pliku package-lock.json. W jakiś sposób wydaje się, że blokuje ci to rekompilację lub odbudowę twoich zależności, nawet jeśli jawnie uruchomisz npm rebuild. Wykonałem wszystkie następujące czynności, aby to naprawić:

rm package-lock.json;
rm -rf node_modules;
npm install;
smets.kevin
źródło
10

Upewnij się, że masz zainstalowaną tylko jedną wersję NodeJS. Wypróbuj te dwa:

node --version
sudo node --version

Początkowo zainstalowałem NodeJS ze źródła, ale była to niepoprawna wersja i 'zaktualizowana' do najnowszej wersji przy użyciu nvm, która nie usuwa żadnych poprzednich wersji i instaluje tylko żądaną wersję w /root/.nvm/versions/...katalogu. Więc sudo nodenadal wskazywał na poprzednią wersję, podczas gdy nodewskazywał na nowszą wersję.

Barkles
źródło
oh! Dlaczego o tym nie pomyślałem! Dzięki za wysłanie wiadomości, więc mogę facepalm.
labirynt
3

Wystąpił ten sam błąd, ale próbowałem uruchomić aplikację węzła przy użyciu kontenera Docker.

Naprawiłem to, dodając plik .dockerignore, aby zignorować katalog node_modules, aby upewnić się, że podczas kompilacji obrazu docker buduje natywne pakiety dla obrazu, który chciałem (Alpine), zamiast kopiować przez node_modules skompilowane dla mojego hosta (Debian) .

Matt
źródło
Pracował dla mnie ... dodał: node_modules/ipackage-lock.json
Giovanne Afonso
3

Okazuje się, że moim problemem był błąd użytkownika: upewnij się, że wersja węzła, którego używasz do uruchomienia, jest taka sama, jak podczas uruchamiania instalacji npm lub przędzy.

Używam NVM do wersjonowania węzła i uruchamiałem przędzę za pośrednictwem terminala, ale moje IDE było ustawione na używanie starszej wersji węzła podczas pracy i wyświetlało powyższy błąd. Dopasowanie wersji węzła mojego IDE w konfiguracji uruchamiania do węzła - wersja rozwiązała problem.

Craig Odell
źródło
1

Miałem podobny problem z robotjs. Było trochę przestarzałego kodu, który wymagał node v11, ale skompilowałem już kod electron w wersji v12. Więc otrzymałem w zasadzie ten sam błąd. Nic tutaj nie działało, ponieważ zasadniczo próbowałem przebudować elektron i inne moje zależności na węzeł v11 z v12.

Oto, co zrobiłem (część tego opiera się na odpowiedzi Chitzui, kredyt jest należny):

  • Utwórz kopię zapasową pliku package.json
  • całkowicie usuń folder node_modules
  • całkowicie usuń package_lock.json
  • usuń pakiet.json (zostanie ponownie zainstalowany później)
  • Zamknij wszystkie otwarte edytory i inne okna cmd, które znajdują się w katalogu projektu.
  • uruchom npm initpakiet reinit, a następnie brakuje danych w starej kopii zapasowej package.json
  • biegać npm i
  • naprawiony :)

Mam nadzieję że to pomoże.

AirFusion
źródło
1

W przypadku modułów Electron zainstaluj przebudowę elektronów.

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

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

Określ tę samą wersję, którą zainstalowałeś w bieżącym katalogu

Możesz mieć takie doświadczenie, w którym standardowa kompilacja węzła-gyp zgłosiłaby jako 64, a podstawowa przebudowa elektronu zgłosiłaby 76, dopiero gdy dodasz -v z dokładną wersją, wskoczy na rzeczywistą wersję 80 (dla 9.0.0-beta. 6)

tomm1e
źródło
1

Usunąłem folder node_modules i uruchomiłem, npm installa moja aplikacja uruchomiła się bez żadnych błędów.

Duszan
źródło
0

Wystąpił ten błąd podczas uruchamiania aplikacji z systememd:

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

Ale używałem innej wersji npm installw powłoce:

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

Jeśli taka jest Twoja konfiguracja, możesz albo na stałe zakodować wersję węzła w pliku usługi, albo zastosować obejście podobne do tego .

Keith
źródło
0

Po wypróbowaniu różnych rzeczy. To zadziałało.

Usuń folder modułów węzłów i uruchom

npm i
Ankit Pandey
źródło
0

Napotkałem ten sam problem z modułem grpc, aw moim przypadku używałem electron i ustawiłem niewłaściwą wersję elektronu w zmiennej env "export npm_config_target = 1.2.3", ustawiając ją na wersję elektronową, której używam, rozwiązałem problem mój koniec. Mam nadzieję, że pomoże to komuś, kto ustawił zmienne env, jak podano tutaj ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way )

proszek antymonowy
źródło
0

Możesz całkowicie usunąć bcrypt i zainstalować bcryptjs. Jest ~ 30% wolniejszy, ale nie ma żadnych zależności, więc nie ma problemu z instalacją.

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

Zainstalowaliśmy go pomyślnie dla naszych aplikacji. Mieliśmy problemy z niekompilacją bcrypt na wystąpieniach AWS dla Node v8.x

Daniel Nitu
źródło
0

Potencjalnie przyczyną problemu jest niespójność wersji JS węzła. Jak podano w dokumentacji . Pamiętaj, aby użyć jednej z wersji lts. Np. Określ to w swoim pliku Dockerfile:

# Pull lts from docker registry
FROM node:8.12.0

# ...
kmos.w
źródło
0

Sprawdź wersję węzła, której używasz, może być niezgodność między oczekiwaniami.

cjjenkinson
źródło
0

Miałem ten sam problem i żadne z tych rozwiązań nie działało i nie wiem dlaczego, pracowały dla mnie w przeszłości przy podobnych problemach.

W każdym razie, aby rozwiązać problem, po prostu ręcznie przebudowałem pakiet przy użyciu node-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

I wszystko działało zgodnie z oczekiwaniami.

Mam nadzieję że to pomoże

wezzy
źródło
0

Właśnie dostałem ten błąd podczas uruchamiania kadence, zainstalowany skrypt "kadence" sprawdza najpierw nodejs i uruchamia węzeł tylko wtedy, gdy nie ma nodejs. Mam najnowszą wersję węzła połączoną z moim katalogiem ~ / bin, ale nodejs uruchamia starszą wersję, o której zapomniałem odinstalować, ale do tej pory nigdy nie powodowała problemów.

Więc ludzie z tym problemem mogą sprawdzić, czy node i nodejs faktycznie używają tej samej wersji node ...

Bill Burdick
źródło
0

W moim przypadku byłem w biurze proxy, które pomijało niektóre pakiety. Kiedy wyszedłem z biura, pełnomocnik i próbowałem to zrobić npm install, zadziałało. Może to komuś pomoże.

Ale zajęło mi kilka godzin, zanim zidentyfikowałem to, co było przyczyną.

Balasubramanian S
źródło
0

W moim przypadku nodejszamiast biegałem node. Ze względu na nodejsinstalację przez menedżera pakietów:

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

# which nodejs
/usr/bin/nodejs
portforwardpodcast
źródło
0

biegnij npm config set python python2.7i biegnij npm installponownie, impreza jest włączona.

Tebogo Mahlalela
źródło
0

wystarczy uruchomić poniższe polecenia:

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

i w końcu

$ ./node_modules/.bin/electron-rebuild

nie zapomnij, yarn add electron-rebuildjeśli nie istnieje w twoich zależnościach.

Ehsan Barkhordar
źródło
0

Dwukrotnie napotkałem ten błąd w aplikacji Electron i okazało się, że problem polega na tym, że niektóre moduły muszą być używane z głównego procesu, a nie z procesu renderowania. Wystąpił błąd przy użyciu pdf2json, a także node-canvas. Przeniesienie kodu, który wymagał tych modułów z index.htm (proces renderowania) do main.js (proces główny), naprawiło błąd, a aplikacja została przebudowana i działała idealnie. To nie rozwiąże problemu we wszystkich przypadkach, ale najpierw należy sprawdzić, czy piszesz aplikację electron i nie napotkasz tego błędu.

Prajna
źródło
0

Oto, co zadziałało dla mnie. Używam modułu węzła z pętlą zwrotną z Electron Js i napotkałem ten problem. Po wypróbowaniu wielu rzeczy, później zadziałało.

W pliku package.json w skryptach dodaj następujące wiersze:

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

A następnie uruchom następujące polecenie npm run rebuild

sediq khan
źródło