Node - был скомпилирован для другой версии Node.js с использованием NODE_MODULE_VERSION 51

152

Я запускаю приложение узла на терминале. Недавно обновились до узла v8.5.0, но получаю эту ошибку:

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)

Есть идеи, как это решить?

JoeTidee
источник
Отметьте, пожалуйста, правильный ответ
Shanika Ediriweera

Ответы:

124

Вам необходимо удалить папку модуля ( bcrypt) из node_modulesпапки и переустановить ее, используя следующие команды:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn
Алексмак
источник
8
Не работает. Для меня проблема связана с zmqпакетом, и восстановление или удаление его и npm installingвсе снова не помогает. Всегда одна и та же проблема.
trusktr
7
@trusktr Попробуйте удалить папку node_modules полностью: rm -rf node_modules. Очистите кеш npm: npm cache clearудалите package-lock.json или npm-shrinkwrap.json. И только после этого беги npm i.
Alexmac 01
1
Получил приятное сообщение: «Я очень надеюсь, что вы знаете, что делаете». когда я очистил этот кеш. Меня не так много, но, видимо, да! Это сработало.
ouflak
вам не нужно / никогда не нужно npm cache clear, другие команды сделали это
caub
Сработало у меня! Моя точная ошибка заключалась в следующем: «Модуль '/ Users / <username> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node' был скомпилирован с другой версией Node.js с использованием NODE_MODULE_VERSION 64."
обычно
82

У меня была такая же проблема, и ничего из упомянутого здесь не работало для меня. Вот что у меня сработало:

  1. Требовать наличия всех необходимых зависимостей в main.jsфайле, запускаемом электроном. (это показалось мне первой важной частью)
  2. Запустите, npm i -D electron-rebuildчтобы добавить пакет electronic-rebuild
  3. Удалите node-modulesпапку, а также packages-lock.jsonфайл.
  4. Запускаем npm iдля установки всех модулей.
  5. Запустите ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdдля Windows), чтобы все перестроить

Это очень важно , чтобы работать ./node_modules/.bin/electron-rebuildнепосредственно после того, как в npm iпротивном случае он не работает на моем компьютере.

Я надеюсь, что смогу помочь некоторым разочарованным душам.

Chitzui
источник
2
Просто запустил команду electronics-rebuild. В моем случае не нужно удалять и переустанавливать модули.
stoefln
1
Что ж, вам повезло, @stoefln, к сожалению, очень важно выполнять эти точные шаги один за другим в некоторых настройках.
chitzui
1
Я использую Windows, но это решение мне тоже помогло. Вы можете объяснить, что вызывает эту проблему? Может ли это быть баг с Электроном?
jbinvnt 01
@jbinvnt да, известно ограничение электрона github.com/SimulatedGREG/electron-vue/issues/872
Константин Вдовкин
Как запустить только электронное восстановление через конвейер или любую команду
Киратака
61

Вам нужно пересобрать пакет и указать npm, чтобы он также обновил его двоичный файл . Пытаться:

npm rebuild bcrypt --update-binary

@robertklep ответил этой командой на относительный вопрос, смотрите .

Только перестройка не решила мою проблему, это отлично работает в моем приложении.

Надеюсь, это поможет!

RPichioli
источник
1
Я думал, что целью перестройки было обновление двоичного файла, когда вы хотите перестроить БЕЗ обновления двоичного файла?
bobmoff
1
@bobmoff Я думал так же, пытаясь использовать только перестройку, в документации говорится, что они обновляют все для нас ... но только ошибки - Моя проблема заключалась в том, чтобы синхронизировать мой старый рабочий локальный репозиторий с новой локальной версией NodeJS / NPM. Итак, я огляделся и увидел, что "--update-binary" был способом сказать ему, чтобы он действительно заставил и изменил его так, как это имеет отношение к естественной перестройке.
RPichioli
31

Просто запустите:

npm uninstall bcrypt

С последующим:

npm install bcrypt(или npm install, если bcrypt объявлен как зависимость в вашем файле package.json )

Морозный Z
источник
13

вы можете увидеть эту ссылку

чтобы проверить правильность вашей версии узла. использование NODE_MODULE_VERSION 51 означает, что версия вашего узла - nodejs v7.x, требуется NODE_MODULE_VERSION. 57 означает, что вам нужно обновить узел до v8.x, поэтому вам необходимо обновить узел. а затем вам нужно запустить npm rebuildкоманду, чтобы перестроить ваш проект

известкование гао
источник
4
Сам ответ должен быть полезным без ссылки.
Тобиас
Была аналогичная проблема с жалобами с 67 на 57. В моем случае я понизился с 11/stableна 8/stableс $ snap refresh node --channel=8/stableв Ubuntu. После этого сделал $ npm rebuild.
Даниэль
Это неверный ответ. NODE_MODULE_VERSION 51означает, что .nodeфайл скомпилирован с использованием некоторой версии узла с использованием NODE_MODULE_VERSION 51. А пользователь использует версию узла с использованием 57, поэтому он не может использовать ее напрямую. Пользователь должен пересобрать компиляцию.
alsotang
11

Скорее всего, у вас возникла эта проблема из-за package-lock.json. Каким-то образом кажется, что это не дает вам перекомпилировать или перестраивать ваши зависимости, даже если вы явно запускаете npm rebuild. Я выполнил все следующее, чтобы исправить это для себя:

rm package-lock.json;
rm -rf node_modules;
npm install;
смец.кевин
источник
11

Убедитесь, что у вас установлена ​​только одна версия NodeJS. Попробуйте эти два:

node --version
sudo node --version

Первоначально я установил NodeJS из исходного кода, но это была неправильная версия, и она была «обновлена» до новейшей с помощью nvm, которая не удаляет никакие предыдущие версии, а устанавливает только желаемую версию в /root/.nvm/versions/...каталоге. Так sudo nodeвсе еще указывал на предыдущую версию, в то время как nodeуказывал на более новую версию.

Барклс
источник
ага! Почему я не подумал об этом! Спасибо за сообщение, так что я могу фейспалм.
лабиринт
3

У меня такая же ошибка, но я пытался запустить приложение узла с помощью контейнера Docker.

Я исправил это, добавив файл .dockerignore, чтобы игнорировать каталог node_modules, чтобы убедиться, что при создании образа докера он создает собственные пакеты для образа, который я хотел (Alpine), вместо копирования node_modules, скомпилированных для моего хоста (Debian) .

Мэтт
источник
Сработал для меня ... добавил: node_modules/andpackage-lock.json
Giovanne Afonso
3

Оказывается, моя проблема заключалась в ошибке пользователя: убедитесь, что версия узла, которую вы используете для запуска, такая же, как и при запуске npm install или yarn.

Я использую NVM для управления версиями узла и запускал yarn через терминал, но моя IDE была настроена на использование более старой версии узла при запуске, и это выдавало ошибку выше. Сопоставление версии узла моей IDE в конфигурации запуска с узлом --version устраняет проблему.

Крейг Оделл
источник
2

Я удалил папку node_modules и запустил, npm installи мое приложение запустилось без ошибок.

Душан
источник
1

У меня была аналогичная проблема с robotjs. Существовал устаревший код, требующий node v11, но я уже скомпилировал электронный код на v12. Так что я получил в основном ту же ошибку. Здесь ничего не сработало, поскольку я в основном пытался перестроить электрон и другие мои зависимости в узел v11 из v12.

Вот что я сделал (частично это основано на ответе chitzui, кредит там, где полагается кредит):

  • Резервное копирование package.json
  • полностью удалить папку node_modules
  • полностью удалить package_lock.json
  • удалить package.json (переустановите позже)
  • Закройте все открытые редакторы и другие окна cmd, которые находятся в каталоге проекта.
  • запустить npm initдля повторной установки пакета, а затем пропустить данные со старым резервным копированием package.json
  • бегать npm i
  • фиксированный :)

Надеюсь это поможет.

AirFusion
источник
1

вам нужно просто выполнить следующие команды:

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

и наконец

$ ./node_modules/.bin/electron-rebuild

не забудьте, yarn add electron-rebuildесли он не существует в ваших зависимостях.

Эхсан Баркхордар
источник
1

Для модулей Electron установите electronics-rebuild.

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

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

Укажите ту же версию, которую вы установили в текущем каталоге

У вас может быть такой опыт, когда стандартная сборка node-gyp будет сообщать как 64, а затем базовая электронная перестройка будет сообщать 76, пока вы не добавите -v с точной версией, она перейдет к фактической версии 80 (для 9.0.0-beta. 6)

Tomm1e
источник
0

Я получил эту ошибку при запуске моего приложения с systemd:

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

Но я использовал другую версию для npm installоболочки:

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

Если это ваша настройка, вы можете либо жестко указать версию узла в служебном файле, либо воспользоваться обходным путем, подобным этому .

Кит
источник
0

Попробовав разные вещи. Это сработало.

Удалите папку модулей вашего узла и запустите

npm i
Анкит Пандей
источник
0

Я столкнулся с той же проблемой с модулем grpc, и в моем случае я использовал электрон и установил неправильную электронную версию в переменной env «export npm_config_target = 1.2.3», установив ее на электронную версию, которую я использую, решила проблему на мой конец. Надеюсь, это поможет кому-то, кто устанавливает переменные env, как указано здесь ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way )

коль
источник
0

Вы можете полностью удалить bcrypt и установить bcryptjs. Он примерно на 30% медленнее, но не имеет зависимостей, поэтому его установка не вызывает затруднений.

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

Мы успешно установили его для наших приложений. У нас были проблемы с bcrypt, который не компилировался на экземплярах AWS для Node v8.x

Даниэль Ниту
источник
0

Потенциально причиной проблемы является несоответствие версий JS узла. Как указано в документации . Обязательно используйте один из выпусков lts. Например, укажите это в вашем Dockerfile:

# Pull lts from docker registry
FROM node:8.12.0

# ...
kmos.w
источник
0

Проверьте версию узла, которую вы используете, возможно, она не соответствует ожидаемой.

Cjjenkinson
источник
0

У меня была такая же проблема, и ни одно из этих решений не помогло, и я не знаю почему, они работали у меня в прошлом для аналогичных проблем.

В любом случае, чтобы решить проблему, я просто вручную перестроил пакет с помощью node-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

И все заработало как положено.

Надеюсь это поможет

Wezzy
источник
0

Я только что получил эту ошибку, запустив kadence, установленный сценарий "kadence" сначала проверяет наличие nodejs и запускает node только в том случае, если nodejs нет. У меня есть последняя версия node, связанная с моим каталогом ~ / bin, но nodejs запускает более старую версию, которую я забыл удалить, но до сих пор не вызывал проблем.

Поэтому люди с этой проблемой могут проверить, действительно ли node и nodejs используют одну и ту же версию node ...

Билл Бердик
источник
0

В моем случае я был в своем офисном прокси, который пропускал некоторые пакеты. Когда я вышел из офиса, прокси и попытался сделать npm installэто сработало. Может это кому-то поможет.

Но мне потребовалось несколько часов, чтобы понять, в чем причина.

Баласубраманский S
источник
0

В моем случае я бежал nodejsвместо node. Из-за nodejsустановки менеджером пакетов:

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

# which nodejs
/usr/bin/nodejs
подкаст
источник
0

беги npm config set python python2.7и беги npm installснова, вечеринка идет.

Тебого Махлалела
источник
0

Я дважды сталкивался с этой ошибкой в ​​электронном приложении, и оказалось, что проблема заключалась в том, что некоторые модули необходимо использовать из основного процесса, а не из процесса рендеринга. Ошибка произошла при использовании pdf2json, а также node-canvas. Перенос кода, который требовал этих модулей, из index.htm (процесс рендеринга) в main.js (основной процесс) устранил ошибку, и приложение было перестроено и отлично работало. Это не решит проблему во всех случаях, но это первое, что нужно проверить, если вы пишете электронное приложение и не столкнетесь ли с этой ошибкой.

Праджня
источник
0

Вот что у меня сработало. Я использую обратную петлю модуль узла с связью с Electron Js и столкнулся с этой проблемой. После многих попыток у меня сработало следующее.

В вашем файле package.json в скриптах добавьте следующие строки:

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

А затем запустите следующую команду npm run rebuild

Седик Хан
источник