Vercel部署报错:npm run build退出码1,已尝试CI=false仍未解决
问题情况
部署Vercel时执行npm run build后返回退出码1,已尝试设置构建命令为npm run build、添加环境变量CI=false,问题仍未解决。部署日志如下:
部署详情日志:
[15:19:45.948] throw err;
[15:19:45.948] ^
[15:19:45.948]
[15:19:45.948] 错误: error:0308010C:数字信封例程::不支持
[15:19:45.948] opensslErrorStack: [ 'error:03000086:数字信封例程::初始化错误' ],
[15:19:45.948] library: '数字信封例程',
[15:19:45.948] reason: '不支持',
[15:19:45.948] code: 'ERR_OSSL_EVP_UNSUPPORTED'
[15:19:45.948] }
[15:19:45.948]
[15:19:45.948] Node.js v18.16.1
[15:19:45.972] 错误: 命令 "npm run build" 退出,码为1
解决方法
这个错误是Node.js 17及以上版本默认使用的OpenSSL 3.0不兼容旧加密算法导致的,三种可行方案:
修改项目构建命令:打开项目根目录的
package.json,给scripts里的build命令加上NODE_OPTIONS=--openssl-legacy-provider前缀。比如React项目改成这样:"scripts": { "build": "NODE_OPTIONS=--openssl-legacy-provider react-scripts build" }非React项目替换成自己的构建命令即可,比如Next.js用
next build。在Vercel添加环境变量:进入Vercel项目的「设置」→「环境变量」,新增一条:
- 变量名:
NODE_OPTIONS - 变量值:
--openssl-legacy-provider
保存后重新触发部署。
- 变量名:
降级Node.js版本:在Vercel环境变量里添加
NODE_VERSION=16.20.0,指定使用Node.js 16版本(该版本使用OpenSSL 1.1.1,不会出现兼容问题)。
内容的提问来源于stack exchange,提问作者Muhammad Ayyaz

