Vercel部署安装bcrypt失败,更换bcryptjs后仍遇GLIBC版本问题
问题描述
Vercel构建项目时持续报错,错误信息如下:
npm ERR! code 1
npm ERR! path /vercel/path0/node_modules/bcrypt
npm ERR! command failed
npm ERR! command sh -c node-pre-gyp install --fallback-to-build
npm ERR! node: /lib64/libm.so.6: versionGLIBC_2.27' not found (required by node) npm ERR! node: /lib64/libc.so.6: versionGLIBC_2.28' not found (required by node)
npm ERR! A complete log of this run can be found in:
npm ERR! /vercel/.npm/_logs/2023-05-27T05_36_03_200Z-debug-0.log
Error: Command "npm install" exited with 1
BUILD_UTILS_SPAWN_1: Command "npm install" exited with 1
已替换bcrypt为bcryptjs解决了该包的安装问题,但Node依赖的GLIBC版本缺失错误仍存在;将构建命令改为npm start(实际执行node src/app.js)后能完成构建,但请求时会报错。
解决方案
1. 指定兼容的Node版本
Vercel构建容器基于CentOS 7,GLIBC版本较低,需使用与之兼容的Node长期支持版(如16.x):
- 在项目根目录创建
.nvmrc文件,写入指定版本:16.20.0 - 在
vercel.json中配置构建环境变量,锁定Node版本:{ "build": { "env": { "NODE_VERSION": "16.20.0" } } }
2. 优化依赖安装流程
- 优先选择纯JS实现的依赖包,避免使用需要本地编译的原生依赖(如已用
bcryptjs替代bcrypt)。 - 若必须保留原生依赖,可在
package.json中调整安装脚本,跳过不必要的编译步骤:{ "scripts": { "install": "npm install --ignore-scripts" } }
3. 修正构建命令
将构建命令改回标准的“安装依赖+构建”流程,确保依赖在构建阶段正确安装:
npm install && npm run build
确保package.json中的build脚本符合项目生产构建要求(Express类项目若无需编译,可设置build脚本为echo "Build complete")。
4. 启用Vercel构建缓存
在vercel.json中开启Node编译缓存,提升构建效率并减少编译错误:
{ "build": { "env": { "ENABLE_NODEJS_V8_COMPILE_CACHE": "1" } } }
内容的提问来源于stack exchange,提问作者David Young

