Bcrypt弹性Beanstalk Node.js部署

15
我正在尝试使用Codeship将我的Node.js后端部署到弹性Beanstalk上。但每次都会出现以下错误:
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.

有人知道如何修复它吗?我已经试了几天了,非常感谢您的帮助!


3
您可以查看Github问题线程-https://github.com/kelektiv/node.bcrypt.js/issues/509。似乎有很多人和您一样遇到了同样的问题。 - Tsvetan Ganev
5个回答

9
尝试使用更新/最新的npm模块bcrypt.js代替bcrypt模块。

运行命令npm install bcryptjs,然后再运行npm install即可。

1
应该使用 npm install bcryptjs,而不是 npm install bcrypt.js。 - awebdev

5

首先确保您没有上传 node modules 文件夹,并且 npm install 命令在实例上可以正常工作。

https://github.com/kelektiv/node.bcrypt.js/wiki/Installation-Instructions

这个问题与node-pre-gyp有关,它是bcrypt的一个依赖项。
在部署到运行Node 8.x的Elastic Beanstalk时,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。

我对其他答案获得更多赞数感到有些惊讶,因为它并不真正适用于 Elastic Beanstalk 部署流程。@Sai Kassam 的答案实际上是最接近正确答案的,使用 .npmrc 文件可以解决此问题,并允许 EBS 的部署流程实际安装 bcrypt。@bytesbase,探索这个作为解决方案可能会很值得,如果有效的话,请将 @sai Kassam 的答案标记为正确答案,以便其他面临完全相同问题的人受益。 - Awah Teh

4

3
我创建了一个包含以下内容的 .npmrc 文件:

unsafe-perm=true

那似乎解决了问题。


这个回答和之前的一样,没有增加任何价值。 - Arefe

0
在你的package.json中添加bcryptjs依赖项,然后npm install应该可以与所有依赖项一起工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接