如何将旧代码库中的 `bcrypt-as-promised` 安装到我的 ubuntu 盒子上?

How can I install `bcrypt-as-promised` from an old code base onto my ubuntu box?

我正在使用来自使用 bcrypt-as-promised 的旧项目的旧代码库(在 bcrypt 允许使用承诺之前)。当我尝试 npm install package.json 时,我收到该包的错误消息:

npm WARN deprecated bcrypt-as-promised@1.1.0: the bcrypt module supports promises now, this module is no longer necessary

npm WARN deprecated bcrypt@0.8.7: bcrypt < v2.0.0 is susceptible to bcrypt wrap-around bug. Upgrade to bcrypt >= v2.0.0 for improved support for newer bcrypt hashes

然后继续失败(如果需要,我可以粘贴更多错误消息)。

对于如何安装这个现已弃用的软件包,我有点困惑。我考虑过修改代码库以仅使用 bcrypt(支持现在的原生承诺),但我害怕潜入蜂巢并破坏应用程序。我首先想知道是否有办法为旧代码库安装此软件包以使其正常工作。

有什么想法吗?感谢您的宝贵时间以及您可能有的任何见解。

我的package.json:https://github.com/twknab/mean_hike/blob/master/package.json

// 编辑:

这是我尝试 sudo npm install:

时收到的完整终端消息
> bcrypt@0.8.7 install /var/www/mean_hike/node_modules/bcrypt
> node-gyp rebuild

gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir 
'/var/www/mean_hike/node_modules/bcrypt/build'
gyp ERR! System Linux 4.4.0-1072-aws
gyp ERR! command "/usr/local/bin/node" 
"/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /var/www/mean_hike/node_modules/bcrypt
gyp ERR! node -v v11.2.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! bcrypt@0.8.7 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the bcrypt@0.8.7 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/ubuntu/.npm/_logs/2018-11-27T10_46_27_925Z-debug.log

旧版本的 bcrypt 安装起来可能非常棘手,看起来您遇到了 npm 的经典权限问题。您可以在此处尝试官方文档中列出的一些技巧:https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally

… 但与此同时,这里有一些尝试:

  1. 首先尝试全局安装 node-gyp,有或没有 须藤:npm install node-gyp -g
  2. 如果可行,然后尝试安装 bcrypt(再次,全局)。
  3. 如果您仍然遇到权限问题, 您可能需要确定 node_modules 目录的所有权: sudo chown -r XXX /usr/lib/node_modules/(假设那是 全局模块目录当然在你的机器上)。

我发现我的问题的解决方案是使用 yarn 导入我所有的依赖项而不是 npm,同时将 bcrypt-as-promised 换成 bcrypt(这现在包括无需语法更改的承诺。

  1. 我在 package.json 文件中放弃了 bcrypt-as-promised 并将其替换为 bcrypt

  2. 然后我将 require('bcrypt-as-promised') 的任何实例更改为 require('bcrypt')(使用 bcrypt 的语法保持不变,只是依赖项导入行需要更改) .

  3. 没有使用 yarn,即使在更改我的文件夹权限后,我仍然遇到权限 "EACCES: permission denied" 错误,只有 bcrypt 失败。我的 npm 和 node 版本看起来不错。确保我的 Ubuntu 框已全部更新。

  4. 那时我从一位聪明的朋友那里得到建议,尝试使用 yarn 来获取依赖项。我 运行 yarn import 读取 package.json 文件并创建一个 yarn.lock 文件。然后我在我的ubuntu机器(sudo npm install yarn -g)上安装了yarn,运行yarn installbcrypt安装成功!

2019 年 1 月更新 - 改进的解决方案

看起来如果 npm 依赖项最初是使用 sudo 安装的,则在尝试安装 bcrypt 时可能会遇到权限问题。我改进的解决方案是:

  • 通过 sudo rm -r ./node_modules
  • 核对 ./node_modules 文件夹
  • 全新安装 npm 包(不使用 sudo)。
  • 在此之后,我可以 npm i --save bcrypt 安装软件包 成功。

这是来自 GitHub 的 link,它帮助我找到了解决方案和摘录:

@Mayocampo permission denied, mkdir '/home/someroute/node_modules/bcrypt/build'

It seems you run rpm as root, therrfore your account cannot mkdir under /home/someroute/node_modules/ Check dir with ls -l /home/someroute/node_modules/ Im sure owner of upper dir is root. or your account cannot have permission.

I guess there are two options are available.

  1. sudo rm -r ./node_modules And install package via npm again, but without using sudo.
  2. Change mod ./node_module to access and excutable. I decided first, and its fixed

来源:juicycool92 @ GitHub