我创建了默认的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天前遇到了这个问题,目前仍在处理。


当前回答

危险

这个问题有30多个答案,大多数人建议要么把Node.js降级到v17之前,要么使用传统的SSL提供程序。这两种解决方案都是黑客攻击,使您的构建容易受到安全威胁。

错误原因

在Node.js v17中,Node.js开发人员关闭了SSL提供者中的一个安全漏洞。这个修复是一个破坏性的更改,与NPM中SSL包中的类似破坏性更改相对应。当您试图在Node.js v17或更高版本中使用SSL而不升级包中的SSL包时。Json,然后你会看到这个错误。

正确的(安全的)解决方案(适用于npm用户)

使用最新版本的Node.js,并使用带有安全补丁的最新包。

对于很多人来说,下面的命令可以解决这个问题:

npm audit fix --force

但是,请注意,对于复杂的构建,上面的命令将引入可能破坏构建的安全修复程序。

Yarn用户注意事项

正如一些评论者指出的那样,如果你使用Yarn而不是Npm,那么上述基于Npm的修复可能不适合你,或者可能会产生不完整的结果。我不使用纱线,所以不能帮助;然而,概念应该是一样的。

Webpack的一个不那么笨拙(也是正确的)的解决方案

在Webpack配置中,设置以下任意一个: (见输出。hashFunction文档)

A. (Webpack v5)设置输出。hashFunction = 'xxhash64'。 B. (Webpack v4)这将取决于nodejs在你的系统上支持什么散列算法。您可以尝试的一些常见选项是输出。hashFunction = 'sha512'或输出。hashFunction = 'sha256'。

在Greg的回答中可以看到更多信息。

其他回答

我今天遇到了这个问题,并通过使用“nvm”切换Node.js版本来解决它。

我一直在用Node.js、Next.js和React做几个个人项目…经常发生在我身上的事情是,我不记得我在哪个项目中使用了哪个版本的Node.js。

因此,通常我会尝试使用Node.js 16来处理当前使用Node.js 14的项目。

我还没有找到更好的方法来记住每个项目的Node.js版本,所以我通常只会在readme.MD中保存我需要运行的所有命令来启动应用程序。

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

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

set NODE_OPTIONS=--openssl-legacy-provider

对于Unix,使用:

export NODE_OPTIONS=--openssl-legacy-provider

作为一个2022年的读者,没有一个答案说明这个问题在Webpack 5用户的早期被修复了(但没有反向移植到Webpack 4)。如果你是Webpack 5,只需升级到至少5.61.0。请参阅此处关于跟踪此问题的线程的评论。

原因:

这个错误是因为node.js 17/18使用了OpenSSL3,它改变了md族(包括md4)初始化上下文的代码,这是一个突破性的变化。 如果你使用docker build构建应用程序,也会出现这个错误,因为它默认会提取最新版本的Node.JS。

安装节点版本管理器或nvm

curl 'https://raw.githubusercontent.com/creationix/nvm/master/install.sh' | bash;

安装最新LTS版本:

nvm install --lts;

使用LTS版本:

nvm use --lts;

完成了!

来源:https://itsmycode.com/error-digital-envelope-routines-unsupported/

与节点v18.0.0版本相同的错误 和nuxt框架版本2.15时运行的开发服务器,将修复:

"scripts": {
  "dev": "NODE_OPTIONS=--openssl-legacy-provider nuxt"
}