Node.js17.0.1运行Gatsby构建报ERR_OSSL_EVP_UNSUPPORTED如何解决
问题原因
该报错是Node.js v17及以上版本默认内置OpenSSL 3.0导致的,OpenSSL 3.0默认禁用了部分安全性不足的旧哈希算法,而旧版本Gatsby依赖的构建工具仍在使用这些被废弃的算法,因此触发初始化错误。Node.js v16版本内置的是OpenSSL 1.1.1版本,没有相关限制,因此回退版本后可以正常构建。
修复方案
下面提供三种不同适用场景的修复方式,可根据需求选择:
临时生效方案(单次构建生效)
在执行构建命令前,先在终端执行对应系统的环境变量配置命令:
- Windows cmd 环境:
set NODE_OPTIONS=--openssl-legacy-provider - Windows PowerShell 环境:
$env:NODE_OPTIONS="--openssl-legacy-provider" - Linux/macOS 环境:
export NODE_OPTIONS=--openssl-legacy-provider
配置完成后再执行gatsby build或gatsby develop即可正常运行。
项目内永久生效方案
可以直接修改项目package.json的启动、构建脚本,无需每次手动配置环境变量:
如果你的项目仅在Linux/macOS环境运行,可以直接修改scripts字段如下:
{ "scripts": { "develop": "NODE_OPTIONS=--openssl-legacy-provider gatsby develop", "build": "NODE_OPTIONS=--openssl-legacy-provider gatsby build" } }
如果需要兼容Windows环境,可以先安装跨平台环境变量工具cross-env:npm install cross-env --save-dev
再修改scripts字段:
{ "scripts": { "develop": "cross-env NODE_OPTIONS=--openssl-legacy-provider gatsby develop", "build": "cross-env NODE_OPTIONS=--openssl-legacy-provider gatsby build" } }
根本修复方案
升级Gatsby及相关依赖到最新版本,新版Gatsby已经完成了OpenSSL 3.0的适配,不需要额外配置环境变量即可正常构建:
执行升级命令:npm update gatsby
如果使用yarn作为包管理器,执行:yarn upgrade gatsby
建议同时升级所有Gatsby相关插件,避免其他兼容问题。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

