我创建了默认的IntelliJ IDEA React项目,并得到了这个:

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:67:19)
    at Object.createHash (node:crypto:130:10)
    at module.exports (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:471:10)
    at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:503:5
    at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:358:12
    at /Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
/Users/user/Programming Documents/WebServer/untitled/node_modules/react-scripts/scripts/start.js:19
  throw err;
  ^

这似乎是最近才出现的问题——webpack在4天前遇到了这个问题,目前仍在处理。


当前回答

有很多变通办法(主要是降级Node.js, OpenSSL,或允许不安全的散列),但潜在的问题是Webpack的输出。hashFunction默认为md4,这会在最新版本的OpenSSL中触发此错误。

从Webpack的输出。hashFunction文档:

从Webpack v5.54.0+开始,hashFunction支持xxhash64作为一种更快的算法,当 实验。futureDefaults已启用。

解决方案是:

设置输出。hashFunction = 'xxhash64' 设置实验。futureDefaults = true

在Webpack配置中。

如果您使用的是较旧版本的Webpack(在v5.54.0之前),请遵循输出。hashFunction链接可以查看其他可用的哈希算法。

其他回答

当我试图运行我新克隆的网站时,我就遇到了这个问题:

npm install

构造变压器失败:错误:错误:0308010C:数字信封例程::不支持

解决上述错误的最简单和最简单的解决方案是将Node.js降级到v14.18.1。然后只需删除文件夹node_modules,并尝试重新构建项目,您的错误必须解决。

临时解决方案如下。实际的解决方案是升级到Webpack 5。

2022年12月更新

这对我来说很管用(降级到Node.js 16):

nvm install 16 --lts
nvm use 16

使用Node.js版本管理器(Windows)。

我在GitHub上找到了以下命令:

对于Windows,在cmd中使用以下命令:

set NODE_OPTIONS=--openssl-legacy-provider

对于Unix,使用:

export NODE_OPTIONS=--openssl-legacy-provider

你可以试试其中的一种:

1. 降级到Node.js v16。

您可以从Node.js的网站重新安装当前的LTS版本。 你也可以使用nvm。对于Windows,请使用vvm - Windows。

2. 启用旧的OpenSSL提供程序。

在类unix (Linux, macOS, Git bash等)上:

export NODE_OPTIONS=--openssl-legacy-provider

在Windows命令提示符中:

set NODE_OPTIONS=--openssl-legacy-provider

PowerShell:

$env:NODE_OPTIONS = "--openssl-legacy-provider"

参考