Node.js 14安装bcrypt.js及低版本bcrypt失败问题求助
问题描述
我在使用Node.js 14版本安装bcrypt.js包时遇到问题,且安装bcrypt 5.x及更低版本时也无法成功,报错信息如下:
node-pre-gyp 警告:bcrypt@5.1.1 和 node@10.19.0(node-v64 ABI,glibc)无法安装预编译二进制包,将回退到用node-gyp从源码编译 node-pre-gyp 警告:遇到错误 ENOENT:没有该文件或目录,mkdir gyp 配置错误! gyp 错误栈:Error: EACCES:权限被拒绝,创建目录 '//node_modules/bcrypt/build' gyp 系统信息:Linux 5.4.0-56-generic gyp 命令:"/usr/bin/node" "/usr/bin/node-gyp" "configure" "--fallback-to-build" "--module=//node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node" "--module_name=bcrypt_lib" "--module_path=//node_modules/bcrypt/lib/binding/napi-v3" "--napi_version=5" "--node_abi_napi=napi" "--napi_build_version=3" "--node_napi_label=napi-v3" gyp 当前工作目录://node_modules/bcrypt gyp node版本:v10.19.0 gyp node-gyp版本:v6.1.0 gyp 执行失败! node-pre-gyp 构建错误! node-pre-gyp 错误栈:Error: 执行 '/usr/bin/node /usr/bin/node-gyp configure --fallback-to-build --module=//node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node --module_name=bcrypt_lib --module_path=//node_modules/bcrypt/lib/binding/napi-v3 --napi_version=5 --node_abi_napi=napi --napi_build_version=3 --node_napi_label=napi-v3' 失败(状态码1) node-pre-gyp 错误栈:在 ChildProcess.cmd.on (//node_modules/@mapbox/node-pre-gyp/lib/util/compile.js:89:23) node-pre-gyp 错误栈:在 ChildProcess.emit (events.js:198:13) node-pre-gyp 错误栈:在 maybeClose (internal/child_process.js:982:16) node-pre-gyp 错误栈:在 Process.ChildProcess._handle.onexit (internal/child_process.js:259:5) node-pre-gyp 系统信息:Linux 5.4.0-56-generic node-pre-gyp 命令:"/usr/bin/node" "//node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build" node-pre-gyp 当前工作目录://node_modules/bcrypt node-pre-gyp node版本:v10.19.0 node-pre-gyp node-pre-gyp版本:v1.0.11 node-pre-gyp 执行失败! 执行 '/usr/bin/node /usr/bin/node-gyp configure --fallback-to-build --module=//node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node --module_name=bcrypt_lib --module_path=//node_modules/bcrypt/lib/binding/napi-v3 --napi_version=5 --node_abi_napi=napi --napi_build_version=3 --node_napi_label=napi-v3' 失败(状态码1) npm 警告:argus_sv2@1.0.0 没有描述信息 npm 警告:argus_sv2@1.0.0 没有仓库字段 npm 警告:跳过可选依赖:fsevents@2.3.3 (node_modules/fsevents): npm 警告:不支持的平台:fsevents@2.3.3 需要 {"os":"darwin","arch":"any"},当前平台是 {"os":"linux","arch":"x64"} npm 错误码:ELIFECYCLE npm 错误号:1 npm 错误:bcrypt@5.1.1 安装脚本:node-pre-gyp install --fallback-to-build npm 错误:退出状态1 npm 错误: npm 错误:bcrypt@5.1.1 安装脚本执行失败。 npm 错误:这可能不是npm的问题,上面可能有更多日志输出。 npm 错误:本次运行的完整日志可在以下位置查看: npm 错误:/root/.npm/_logs/2024-01-02T08_19_53_217Z-debug.log
解决方法
1. 修正Node.js版本
日志显示当前实际使用的是Node.js v10.19.0,而非你声明的v14。bcrypt 5.x对Node.js v10的兼容有限,且预编译二进制包无法匹配该版本。先切换到Node.js 14:
- 若使用nvm,执行:
nvm use 14 - 未安装nvm的话,先安装nvm再切换版本,或直接升级Node.js到v14。
2. 解决权限问题
报错核心是权限不足无法创建build目录,可通过以下方式解决:
- 临时允许权限安装(仅用于测试,注意安全):
npm install bcrypt@5.x --unsafe-perm - 确保当前用户对项目目录拥有写权限:
chown -R $USER:$USER ./node_modules npm install bcrypt@5.x - 避免用root用户执行
npm install,改用普通用户操作。
3. 安装源码编译依赖
当预编译二进制包不可用时,node-gyp需要依赖编译工具:
- Ubuntu/Debian系统:
sudo apt-get install build-essential python3 - CentOS/RHEL系统:
sudo yum groupinstall 'Development Tools' && sudo yum install python3
安装完成后重新执行npm install bcrypt@5.x。
4. 替代方案:使用bcryptjs
若上述方法仍无法解决,可直接使用纯JavaScript实现的bcryptjs,无需编译:
npm install bcryptjs
bcryptjs的API与bcrypt几乎完全一致,可直接替换使用。
内容的提问来源于stack exchange,提问作者Ramkumar
相关产品推荐
相关产品推荐

