问题
I'm trying to deploy my nodejs backend with codeship to elastic beanstalk. But everytime I get the following error:
bcrypt@1.0.3 install /tmp/deployment/application/node_modules/bcrypt
node-pre-gyp install --fallback-to-build
module.js:471
throw err;
^
Error: Cannot find module '../'
at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/tmp/deployment/application/node_modules/.bin/node-pre-gyp:15:20)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
npm ERR! Linux 4.9.62-21.56.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v6.11.5-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v6.11.5-linux-x64/bin/npm" "--production" "rebuild"
npm ERR! node v6.11.5
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE
npm ERR! bcrypt@1.0.3 install: `node-pre-gyp install --fallback-to-build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the bcrypt@1.0.3 install script 'node-pre-gyp install --fallback-to-build'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the bcrypt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-pre-gyp install --fallback-to-build
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs bcrypt
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls bcrypt
npm ERR! There is likely additional logging output above.
Does anyone know how to fix it? been trying to fix it for couple days now, help is much appreciated!
回答1:
Try to use bcrypt.js
module instead of bcrypt
which is an update/latest npm module.
Run npm install bcryptjs
and then npm install
回答2:
See this GitHub comment: https://github.com/kelektiv/node.bcrypt.js/issues/509#issuecomment-313693838
TL;DR: as a workaround run npm install bcrypt
before running npm install
回答3:
First make sure you are not uploading the node modules folder and that the npm install command is working on the instance.
https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions
This problem is related to node-pre-gyp. A dependency of bcrypt.
For AWS Elastic Beanstalk When deploying to Elastic Beanstalk running Node 8.x, node-gyp doesn't have sufficient permissions to write to the tmp directory. bcrypt won't install and the application deployment will fail.
A workaround is to add a .npmrc file to the root of your project that will force node-gyp to run as root and allow the installation to complete. File contents for .npmrc:
# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5 or @6
unsafe-perm=true
Another alternative (Perhaps the more right way) is to make .ebextensions file with code:
.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
This will give you sufficient access to run node-gyp
回答4:
I created a .npmrc
file with:
unsafe-perm=true
That seemed to have done it.
回答5:
Add bcryptjs
dependency in your package.json
and then npm install
should work with all the dependencies.
来源:https://stackoverflow.com/questions/47972468/bcrypt-elastic-beanstalk-nodejs-deploy