15

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!

bytesbase
  • 191
  • 1
  • 8
  • 3
    You can see the github issue thread - https://github.com/kelektiv/node.bcrypt.js/issues/509. It seems that a lot of people are having the same problem as you. – Tsvetan Ganev Dec 25 '17 at 22:46

5 Answers5

9

Try to use bcrypt.js module instead of bcrypt which is an update/latest npm module.

Run npm install bcryptjs and then npm install

kartik tyagi
  • 6,256
  • 2
  • 14
  • 31
5

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

sai kasam
  • 61
  • 1
  • 2
  • I am a bit flabbergasted as to how the other answers got more upvotes as it doesn't really apply to Elastic Beanstalk deployment flows. @Sai Kassam's answer is actually the closest thing to the correct answer and using a `.npmrc` file would solve this issue and allow the deployment flow for EBS to actually install bcrypt. @bytesbase, it may be worth exploring this as a solution to your problem and if it works, mark @sai Kassam's answer as the correct answer so others that face the exact same issue can benefit from it. – Awah Teh Mar 24 '21 at 13:41
4

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

I created a .npmrc file with:

unsafe-perm=true

That seemed to have done it.

Shamoon
  • 41,293
  • 91
  • 306
  • 570
0

Add bcryptjs dependency in your package.json and then npm install should work with all the dependencies.

nischay goyal
  • 3,206
  • 12
  • 23