Я работаю над проектом nodejs для школы. Мне не удалось установить bcrypt с npm, поэтому я установил bcrypt-nodejs, и вчера проект работал нормально. Но сегодня, когда я использую «приложение узла», у меня возникает такая ошибка:
/.../node_modules/bcrypt/node_modules/bindings/bindings.js:79
throw e
^
Error: /.../node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at bindings (/.../node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
at Object.<anonymous> (/.../node_modules/bcrypt/bcrypt.js:1:97)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
мой файл package.json выглядит так:
{
"name": "Supinfarm",
"version": "0.0.0",
"env": {
"PYTHON": "/usr/bin/python2.6"
},
"dependencies": {
"express": "3.1.0",
"connect-flash": "*",
"jade": "*",
"stylus": "*",
"passport": "*",
"passport-local": "*",
"mongoose": "*",
"bcrypt": "*"
}
}
Я использую Linux ubuntu 10.04 LTS. Я безуспешно пытался найти решение в Google ... Кто-нибудь может мне помочь?
Ответы:
Я обнаружил, что bcrypt, скомпилированный в OSX, не будет работать в Linux . Другими словами, если вы зарегистрируете bcrypt, скомпилированный на вашей локальной рабочей станции OSX, и попытаетесь запустить приложение узла на своих серверах Linux, вы увидите ошибку выше.
Решение:
npm install bcrypt
в Linux проверьте это, решено.Вероятно, лучший способ справиться с этим - исключить ваши node_modules в .gitignore ... и установить npm удаленно.
источник
file /Users/mikemaccana/Documents/sandpitlab/waves/node_modules/bcrypt/build/Release/bcrypt_lib.node
чтобы проверить.Node-sass includes pre-compiled binaries for popular platforms, to add a binary for your platform follow these steps:
. Это не кросс-компиляция, а предоставление предварительно скомпилированных двоичных файлов. Node-gyp по умолчанию НЕ выполняет кросс-компиляцию.Если вы работаете внутри контейнера докеров, как и я, все, что вам нужно, это .dockerignore с указанным в нем 'node_modules'.
Некоторые библиотеки необходимо скомпилировать на хост-машине, поэтому ваши модули могут быть устаревшими.
источник
Моя проблема была в моем файле docker-compose.yml, у меня уже были node_modules в моем .dockerignore, но мне также нужно было добавить каталог node_modules в качестве тома:
volumes: - ./:/usr/src/app - /usr/src/app/node_modules
источник
Я также столкнулся с той же проблемой с bcrypt v.1.0.3. Только что обновился до последней версии (3.0.1), и теперь он работает нормально
Бегать
источник
Сначала убедитесь, что вы не загружаете модули узлов и запускаете npm install на самом компьютере с Linux, поскольку установка bcrypt может варьироваться в зависимости от используемой платформы. Вы можете посмотреть другие инструкции по установке для других платформ ниже.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
Если у вас возникнут дополнительные проблемы, это может быть связано с node-pre-gyp. Зависимость bcrypt.
Для AWS Elastic Beanstalk При развертывании в Elastic Beanstalk под управлением Node 8.x у node-gyp недостаточно прав для записи в каталог tmp. bcrypt не устанавливается, и развертывание приложения завершается ошибкой.
Обходной путь - добавить файл .npmrc в корень вашего проекта, который заставит node-gyp запускаться от имени root и позволит завершить установку. Содержимое файла для .npmrc:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6 unsafe-perm=true
Другой вариант (возможно, более правильный) - создать файл .ebextensions с кодом:
.ebextensions:00_change_npm_permissions.config: "/opt/elasticbeanstalk/hooks/appdeploy/post/00_set_tmp_permissions.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash chown -R nodejs:nodejs /tmp/.npm
Это даст вам достаточный доступ для запуска node-gyp
источник
Есть простой способ решить эту проблему:
1. Удалите bcrypt.
2.- Установите bcrypt еще раз
Ошибка возникает из-за того, что при установке bcypt npm устанавливает рекомендованную версию для вашего компьютера и операционной системы, но когда вы находитесь на другом компьютере, это не работает.
источник
Для тех, кто развертывает приложение на эластичном beanstalk AWS и собирается установить bcrypt на сервер, включите в хук после развертывания
.ebextensions/01_build.config
:files: "/opt/elasticbeanstalk/hooks/appdeploy/post/99_build_app.sh": mode: "000755" owner: root group: root content: | #!/usr/bin/env bash cd /var/app/current/ rm -rf node_modules/bcrypt sudo /opt/elasticbeanstalk/node-install/node-v10.13.0-linux-x64/bin/npm install bcrypt@latest
источник
Я знаю, что это может быть немного хлопотно, но это решение. Когда мне нужно было внедрить Bcrypt, я запустил экземпляр Cloud 9. Для тех из вас, кто не знает, Cloud9 - это базовая IDE AWS, работающая на инстансе EC2. Из Cloud9 вы можете загрузить свой код в ide как лямбда-функцию. Итак, я написал функцию в Cloud9, и когда я ее загрузил, код заработал.
источник