Node.js 17.0.1 Gatsby 错误 - “数字信封例程::不支持... ERR_OSSL_EVP_UNSUPPORTED”[重复]

问题描述 投票:0回答:6

我正在构建一个 Gatsby 网站。我将 Node.js 升级到v17.0.1,当我运行构建时,出现错误:

Error: digital envelope routines::unsupported

opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'

如果我将其降级到 v16,它可以正常工作,并且构建将会成功。我该如何解决这个问题?

通过谷歌搜索,这可能是一个类似的问题: 错误:错误:06065064:数字信封例程:EVP_DecryptFinal_ex:解密错误#48

node.js gatsby
6个回答
242
投票

这可能会有所帮助。将这些脚本添加到 package.json 文件中。

反应:

"scripts": {
    "start": "export SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts start",
    "build": "export SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts build"
}

如果您使用

Windows
并且正在使用
React.js
,您可以在脚本中使用
set
代替
export
,如下所示:

"scripts": {
    "start": "set SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts start",
    "build": "set SET NODE_OPTIONS=--openssl-legacy-provider && react-scripts build"
}

"scripts": {
    "start": "react-scripts --openssl-legacy-provider start",
    "build": "react-scripts --openssl-legacy-provider build",
}

Vue.js:

"scripts": {
    "serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
    "lint": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service lint"
},

如果您使用

Windows
并且正在使用
Vue.js
,您可以在脚本中使用
set
代替
export
,如下所示:

"scripts": {
    "serve": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
    "build": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build",
    "lint": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service lint"
},

"scripts": {
    "serve": "vue-cli-service --openssl-legacy-provider serve",
    "build": "vue-cli-service --openssl-legacy-provider build",
    "lint": "vue-cli-service --openssl-legacy-provider lint"
},

角度:

"scripts": {
 "start": "set NODE_OPTIONS=--openssl-legacy-provider  && gulp buildDev && ng serve ",
 "publish": "set NODE_OPTIONS=--openssl-legacy-provider  && gulp build && ng build --prod",
},

169
投票

快速修复:在 React 项目内的终端中运行此命令。

export NODE_OPTIONS=--openssl-legacy-provider

90
投票

更新⚠️

这是一个 webpack 问题(最有可能)

他们已经在 5.61.0 版本中发布了修复程序,因此 将 webpack 升级到版本 5.61.0 或更高版本 也应该可以解决该问题。

webpack 团队的一名成员表示他们不打算将修复程序向后移植到 webpack 4,因此如果您使用的是 webpack 4,您可能需要首先考虑升级到 webpack 5。

该问题与使用

md4
哈希值的 webpack 相关,他们的修复是切换到使用
md4
算法的 WASM 实现,而不是节点的内置算法(其中节点依赖于 OpenSSL,因此会出现错误)。


原始回复:

Gatsby / Gatsby 中使用的工具必须使用加密算法或密钥大小,OpenSSL 3.0 默认情况下不再允许这种情况。

来自 Node.js 17 的公告帖子

如果您在使用 Node.js 17 的应用程序中遇到

ERR_OSSL_EVP_UNSUPPORTED
错误,则您正在使用的应用程序或模块可能正在尝试使用 OpenSSL 3.0 默认情况下不再允许的算法或密钥大小。添加了一个新的命令行选项
--openssl-legacy-provider
,以恢复到旧提供程序,作为这些严格限制的临时解决方法。

在终端上运行它可能看起来像:

node --openssl-legacy-provider ./node_modules/.bin/gatsby build

您还可以通过 NODE_OPTIONS 环境变量传递它。

因此,如果您想继续使用 NPM 脚本,可以将

build
脚本更改为:

// package.json
{
  "scripts": {
    "build": "NODE_OPTIONS=--openssl-legacy-provider gatsby build"
  }
}

26
投票

此问题是在 Node.js 17 的新更新中出现的。 在 React 中,您可以将 package.json 文件中的 script 属性更改为:

"scripts": {
    "start": "react-scripts --openssl-legacy-provider start",
    "build": "react-scripts --openssl-legacy-provider build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
}

19
投票

我也遇到了同样的问题,所以我只是降级了Node.js版本:

  • 卸载 Node.js

  • 然后下载并安装16.13.0。


12
投票

我认为对于新的 Node.js 更新后遇到的这个错误有两种解决方案。

  1. 降级 Node.js

  2. 节点模块 反应脚本

© www.soinside.com 2019 - 2024. All rights reserved.