错误消息“错误:0308010C:数字信封例程::不支持”

IT技术 node.js reactjs webpack webstorm
2021-04-21 01:09:19

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

6个回答

将其粘贴到终端(基于 Unix 的操作系统)中:

export NODE_OPTIONS=--openssl-legacy-provider

在 Windows 中使用 git bash。

参考链接

@Evergreen 您必须在构建时定义变量 --> 在您的 npm run 命令中(您可以根据您的操作系统使用 export、SET 或 cross-env)
2021-05-23 01:09:19
我把这个放在哪里?
2021-05-29 01:09:19
对我来说这个命令失败 /usr/local/Cellar/node/17.0.1/bin/node: --openssl-legacy-provider is not allowed in NODE_OPTIONS
2021-06-03 01:09:19
一个解释将是有序的。例如,为什么有必要?它应该达到什么目的?为什么有效?如果有的话,安全隐患是什么?为什么这个答案与其他答案完全不同?请通过编辑(更改)您的答案来回应,而不是在评论中(没有“编辑:”、“更新:”或类似的 - 答案应该看起来就像今天写的一样)。
2021-06-03 01:09:19
不推荐此解决方案,尝试卸载Node.js 17+版本并重新安装Node.js 16+版本。
2021-06-10 01:09:19

在你的 package.json: 改变这一行

"start": "react-scripts start"

"start": "react-scripts --openssl-legacy-provider start"
见阿肖克的回答。这是保持 SSL 无漏洞工作的正确解决方案,并且对我有用。
2021-05-25 01:09:19
但请注意,这--openssl-legacy-provider意味着您现在几乎肯定会使用已知的不安全 SSL 运行,因此这可能会减轻症状,但可能无法解决根本问题。
2021-06-09 01:09:19
我不明白这意味着,不知何故,在旧模式下使用节点 16 和 openssl 1.x 比使用节点 17 和 openssl 3 更安全。OpenSSL 在 v3 中做了一些更严格的事情。你要么以一种方式打破这种限制,要么以另一种方式。这两种方法可能同样不安全。
2021-06-12 01:09:19
但出于原因,这在运行 localhost 时是可以接受的。在新发布的VS 2022中,从头开始一个react-app,让VS 2022为你创建一个自签名证书,仍然导致示例项目崩溃。当使用 NPM 命令行“npx create-react-app react-core-test”从头开始创建反应项目时,这也是一个问题。我在运行 WINdows 10 和 Windows 11 的两个不同环境中对此进行了测试。
2021-06-21 01:09:19

如果我们使用 Node.js 的当前 LTS 版本,则不会出现此错误。将您的 Node.js 版本降级到当前的 LTS 版本 (16.13.0)。

可以有多种方法来安装所需的版本。其中之一是使用 nvm(Node.js 版本管理器)。

强行降级
2021-05-25 01:09:19
但是...为什么新版本与旧代码不兼容?node 是世界上最大的编程工具之一,他们不会只是创建一个不向后兼容的 nodejs 新版本(我猜他们会因为他们做到了,但你明白我的意思)
2021-05-29 01:09:19
这应该是正确答案。
2021-05-30 01:09:19
始终将 LTS 用于实际应用程序,它解决了问题。
2021-06-03 01:09:19
谢谢,太好了。在卸载 nodejs 版本 17.1.0 并重新安装 nodejs 版本 16.13.0 后,它运行良好。
2021-06-08 01:09:19

这是 Node.js 版本。

我在 Node.js 17 上有这个错误,但是当我使用nvm.

你是对的,将 npm 版本回滚到 16.13.x 有效!
2021-05-26 01:09:19
同样在这里。恢复到节点 16 解决了该问题。
2021-05-29 01:09:19
对。刚刚在尝试运行安全帽测试时遇到。很想听听造成它的原因的详细信息。
2021-06-01 01:09:19
如果您使用的包管理器的巧克力,你可以choco uninstall nodejschoco install nodejs-lts安装节点的LTS版本。
2021-06-11 01:09:19

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

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

set NODE_OPTIONS=--openssl-legacy-provider

对于 Unix,请使用:

export NODE_OPTIONS=--openssl-legacy-provider
@AliKHalili 这个 github 链接解释了它:- github.com/webpack/webpack/issues/14532#issuecomment-947012063
2021-06-02 01:09:19
谢谢,它奏效了。但是你能解释为什么会发生这种情况以及这个命令是如何解决问题的吗?
2021-06-04 01:09:19
为我工作,谢谢,但这不是永久的解决方案。
2021-06-05 01:09:19
@AbdulBasitRishi 是的,遗憾的是事实并非如此。更简单的方法是降级节点版本。似乎是 Node.js 中的新版本问题。可能他们会修复它
2021-06-11 01:09:19
@RiteshKumar 是的,希望如此,谢谢。
2021-06-21 01:09:19