我正在建造一个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,它工作正常,构建就会成功.我该怎么解决这个问题?

从谷歌上看,这可能是一个类似的问题:

推荐答案

gatsby 必须使用OpenSSL 3.0默认不再允许的algorithm or key size.

UPDATE ⚠️

这很可能是一个网页问题-https://github.com/webpack/webpack/issues/14532

他们在version 5.61.0-https://github.com/webpack/webpack/releases/tag/v5.61.0发布了一个补丁,所以升级网页包也应该解决这个问题

webpack team has stated的一名成员表示,他们不打算将修复程序向后移植到webpack 4,因此如果您使用的是webpack 4,则可能需要先升级到webpack 5.


Node.js 17's announcement post开始:

如果应用程序中的Node出现ERR_OSSL_EVP_UNSUPPORTED错误.js 17,您的应用程序或正在使用的模块很可能试图使用OpenSSL 3.0默认不再允许的算法或密钥大小.增加了一个新的command-line option--openssl-legacy-provider,作为这些严格限制的临时解决方案,它将恢复到传统Provider .

在终端上运行此操作可能会如下所示:

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

您还可以通过NODE_OPTIONS环境变量将其传入.

因此,如果您想继续使用NPM脚本,可以将build脚本更改为:

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

Node.js相关问答推荐

正在try 使用Azure Function App上载文件时未上载文件(&Q;)

如何在Mongoose for MongoDB中编写此查询

mongodb首先自连接,然后根据某些条件与另一个表连接

使用 playwright 获取页面中同一 url 的所有响应

为什么要加密 CSRF 令牌?

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

在 Atlas 触发器(Node JS)中正确初始化 Firebase 管理 SDK

获取用户 ID 后,Firebase 函数 onCreate 方法在 Firestore 上不起作用

带有事件网格的 Azure 函数在没有 ngrok 的情况下在本地运行

如何在 cypress 测试中进行计算

在 ExpressJS 中将变量传递给 JavaScript

在本地运行 Cloud Functions 会出现错误functions.config() 不可用

使用 Socket.io 将客户端连接到服务器

如何将`yarn.lock`与`package.json`同步?

使用 ES6 语法和动态路径导入模块

如何在 Joi 字符串验证中使用枚举值

node.js 中存储的模块变量在什么范围内?

从 zip 文件在 AWS 中创建 lambda 函数

如何从 Node.js 中的 URL 获取

为什么 Node.js 被命名为 Node.js?