【问题标题】:Error message "error:0308010C:digital envelope routines::unsupported"错误消息“错误:0308010C:数字信封例程::不支持”
【发布时间】:2021-12-10 00:58:22
【问题描述】:

我创建了默认的 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 ran into this 4 days ago and is still working on it

【问题讨论】:

  • 该问题链接中提到的解决方法对您有用吗?
  • 我在使用下一个 js 时遇到了同样的错误,我降级了我的节点版本,现在该错误不会出现。
  • @Mike'Pomax'Kamermans Webpack 没有解决这个问题的方法:/ 这就是我问这个问题的原因。
  • 有吗? github.com/webpack/webpack/issues/14532#issuecomment-947012063 是在 6 天前发布的(从那时起,人们进行了很多跟进,询问究竟如何使用它,并得到了很多人的解释)。
  • @Mike'Pomax'Kamermans 我的错!我看到了,想“但在哪里”并寻找答案,但只发现有人问我想知道什么。我的错!

标签: node.js reactjs webpack webstorm


【解决方案1】:

打开终端并按照说明粘贴这些内容:

Linux & Mac OS (windows git bash)-

export NODE_OPTIONS=--openssl-legacy-provider

Windows 命令提示符-

set NODE_OPTIONS=--openssl-legacy-provider

参考link

【讨论】:

  • 我把这个放在哪里?
  • @Evergreen 您必须在构建时定义变量 --> 在您的 npm run 命令中(您可以使用 export、SET 或 cross-env,具体取决于您的操作系统)
  • 对我来说这个命令失败/usr/local/Cellar/node/17.0.1/bin/node: --openssl-legacy-provider is not allowed in NODE_OPTIONS
  • 解释一下。例如,为什么有必要?它应该达到什么目的?为什么它有效?有什么安全隐患(如果有的话)?为什么这个答案与其他答案完全不同?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
  • 这个方案不推荐,尝试卸载Node.js 17+版本,重新安装Node.js 16+版本。
【解决方案2】:

在你的 package.json 中:更改这一行

"start": "react-scripts start"

"start": "react-scripts --openssl-legacy-provider start"

【讨论】:

  • 但请注意,--openssl-legacy-provider 意味着您现在几乎可以肯定是running with known insecure SSL,因此这可能会减轻症状,但可能无法解决根本问题。
  • 当然,这在运行 localhost 时是可以接受的。在新发布的 VS 2022 中,从头开始一个 react-app,让 VS 2022 为您创建自签名证书,仍然会导致示例项目崩溃。当使用 NPM 命令行“npx create-react-app react-core-test”从头开始创建 react-project 时,这也是一个问题。我在 WINdows 10 和 Windows 11 运行的两个不同环境中对此进行了测试。
  • 查看 Ashok 的回答。这是保持 SSL 无漏洞工作的正确解决方案,它对我有用。
  • 我不明白以某种方式将节点 16 与 openssl 1.x 一起使用会比在传统模式下将节点 17 与 openssl 3 一起使用更安全。 OpenSSL 在 v3 中做了一些更严格的规定。您要么以一种方式克服该限制,要么以另一种方式击败该限制。这两种方法可能同样不安全。
【解决方案3】:

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

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

【讨论】:

  • 但是...为什么新版本与旧代码不兼容? node 是世界上最大的编程工具之一,他们不会只是创建一个不向后兼容的新版本 nodejs(我猜他们会因为他们做到了,但你明白我的意思)
  • 这应该是正确的答案。
  • 强制降级
  • 在实际应用中始终使用 LTS,它解决了问题。
  • 16 之后的新 LTS 是否应该恢复到旧 SSL?我假设问题是一样的,只是推迟到以后,使用 LTS 16 是一个临时解决方案。
【解决方案4】:

这是 Node.js 版本。

我在 Node.js 17 上遇到此错误,但是当我使用 nvm 将我的 Node.js 版本切换到旧版本 (16) 时没问题。

【讨论】:

  • 这里也一样。恢复到节点 16 解决了这个问题。
  • 是的。刚刚尝试运行安全帽测试时遇到。很想听听造成它的原因。
  • 你是对的,将 npm 版本回滚到 16.13.x 有效!
  • 如果你使用的是包管理器 Chocolatey,你可以通过choco uninstall nodejschoco install nodejs-lts 来安装 LTS 版本的 node。
  • 不知何故,这个错误也发生在节点 v16 上...
【解决方案5】:

一些热门答案无效。

export NODE_OPTIONS=--openssl-legacy-provider

还有一些热门答案不适用,修改package.json文件:

"start": "react-scripts --openssl-legacy-provider start"

这是由最新的 node.js V17OpenSSL 兼容问题引起的,请参阅 GitHub 上的 thisthis 问题。

最简单的事情就是从node.js V17 降级到node.js V16。请参阅this post 了解如何降级node.js

【讨论】:

  • 确认将版本降级为V.16 解决了该问题。 nvm install v16 && nvm alias default v16 && nvm use v16.
  • 从 v17 降级到 v16 解决了这个问题
【解决方案6】:

我在 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
  • @AbdulBasitRishi 是的,很遗憾不是。更容易的是降级节点版本。似乎是 Node.js 中的一个新版本问题。可能他们会修复它
  • @RiteshKumar 希望是的,谢谢。
【解决方案7】:

这对我有用(从 Node.js 17 降级到 Node.js 16):

nvm install --lts
nvm use --lts

使用Node.js Version Manager (for Windows)。

【讨论】:

  • 谢谢!为我工作
  • 它对我有用,但我必须在没有破折号的情况下使用nvm install lts(Windows 10 - Powershell)。
【解决方案8】:

我在 Docker 构建中遇到了这个问题,我在 Docker 文件中添加了这一行:

RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn build && yarn install --production --ignore-scripts --prefer-offline

对于本地开发,在文件package.json中添加开关。

【讨论】:

  • 非常感谢你刚才发生在我身上
  • ohhhh,这就是你放这段代码的地方,我到处都看到过!这是给docker的,我不用docker哈哈。
  • NODE_OPTIONS=--openssl-legacy-provider 是命令行参数,在运行 yarn build 时应该存在。与 Docker 无关。当您构建应用程序的 docker 映像时,上面的行就是您用来构建的对象
  • 这几乎是 Ajoy Karmakar's answer 的重复。这个也缺少解释。你能提供一个解释吗?例如,为什么需要--openssl-legacy-provider?为什么所有yarn 的东西?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
  • 上面的答案在 docker 文件中运行,yarn 作为包管理器。这将帮助使用类似环境且无法通过提供的其他答案解决的用户。我会用更多的解释来编辑答案。谢谢
【解决方案9】:

这个解决方案对我有用。

Node.js 版本 17+ 出现此错误,因此请尝试降级 Node.js 版本。

  1. 从计算机上卸载 Node.js。
  2. https://nodejs.org/download/release/v16.13.0/ 下载 Node.js 版本 16 并重新安装

就是这样。

【讨论】:

  • 但是为什么呢?为什么node v17有问题
  • @Evergreen 这很可能是 webpack4 问题,同样在 17 版中,Node.js 开发人员已弃用导入映射规范中不支持的尾部斜杠模式映射。 Node.js 开发者需要尽快解决这个问题。
  • 是的,我希望 node js 作为一个如此广泛使用的产品,会更加关注向后兼容性。
  • 或者,如果您使用的是 nvm(节点版本管理器)(如果您不使用,那么您应该使用,所以请花点时间这样做......),您只需输入 @ 987654322@,你很高兴。
【解决方案10】:

构造变压器失败:错误:error:0308010C:digital envelope routines::unsupported

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

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
  • 这个措辞很奇怪:|尝试在代码markdown help 周围使用` 字符
  • 版本 v16.13.0 而不是 17.x 对我来说也很有效。我也不需要删除node_modules 文件夹。
【解决方案11】:

如果您遇到此错误并且您不想更改主要配置,一个简单的解决方法是使用以下方法。不过,我不确定这是否被推荐为一种好的做法。

欢迎指正。

首先,假设这是我的package.json 文件的脚本部分:

...
"version": "1.0.0",
  "scripts": {
    ...
    "build": "npm run build:test-app:testing",
    "build:test-app:testing": "ng build test-app --deploy-url  https://test-app.com/ --configuration=test-config",
    ...
  },
  "private": true,
...

要使用此export NODE_OPTIONS=--openssl-legacy-provider,您可以执行以下操作:

"version": "1.0.0",
  "scripts": {
....
    "build": "NODE_OPTIONS=--openssl-legacy-provider npm run build:test-app:testing”,
    "build:test-app:testing": "NODE_OPTIONS=--openssl-legacy-provider ng build test-app --deploy-url  https://test-app.com/ --configuration=test-config"
...
  },
  "private": true,

记下构建脚本。我添加了一个选项:NODE_OPTIONS=--openssl-legacy-provider

这有助于解决 Node.js 版本 17 中的此错误。

对于那些可以灵活更改构建系统的 Node.js 版本的人,只需切换到低于 17 的版本,例如版本 16。

对于 Docker,最初使用 this 的用例,总是拉取最新版本:

...
FROM node:alpine
...

你可以切换到类似的东西:

...
FROM node:16-alpine3.12
...

【讨论】:

    【解决方案12】:

    在您的 package.json 文件中:

    换行

    "start": "react-scripts start"

    "start": "react-scripts --openssl-legacy-provider start"

    【讨论】:

      【解决方案13】:

      试试:

      npm create react-app --template typescript foo --use-npm
      

      【讨论】:

      • 解释一下。例如,想法/要点是什么?它有什么作用?它是如何工作的?为什么它有效?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
      【解决方案14】:

      我在使用 Node.js 17.0.1 时遇到了同样的问题。我通过以下步骤解决了它:

      • 打开控制面板程序和功能Node.js并通过右键单击卸载Node.js

      • 访问网站 https://nodejs.org/en/ 并下载版本并安装。

      【讨论】:

      • Re “控制面板→程序和功能”:大概是Windows
      【解决方案15】:

      转至:https://nodejs.org/en/

      并为大多数用户下载推荐版本。

      然后从您的 PC 上卸载 Node.js 并安装 推荐 版本。

      据我了解,这是开发团队的问题。他们会尽快修复它,但同时使用推荐的版本,一切都会好起来的。

      【讨论】:

      • 我不知道是什么问题。但是你的回答解决了我的问题
      • @Jagath 很高兴,我可以帮忙:p
      【解决方案16】:

      这在我的应用程序博览会中对我有用(从 Node.js 17 降级到 Node.js 12 或 14)。

      如果你安装了 nvm,你可以更改 node 的版本:

      首先检查 nvm 中 Node.js 的版本:

      nvm list
      

      其次,安装版本 12 或 14:

      nvm install v12.22.8
      

      【讨论】:

        【解决方案17】:

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

        我一直在使用 Node.js 处理几个个人项目,Next.jsReact... 我经常发生的事情是我不记得究竟是哪个版本的 Node.js我用于哪个项目。

        所以通常我会尝试将 Node.js 16 用于当前使用 Node.js 14 的项目(我目前使用的是 Node.js 17)。

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

        【讨论】:

          【解决方案18】:

          在终端 (OS X) 中,只需像这样降级:

          sudo n 16.13.0
          

          【讨论】:

            【解决方案19】:

            在 Dockerfile 上你应该添加:

            ENV NODE_OPTIONS=--openssl-legacy-provider
            

            【讨论】:

            • 几乎重复:Ajoy Karmakar's answer(也没有任何解释)
            • 我希望清楚如何与 Docker 一起使用
            猜你喜欢
            • 2023-03-12
            • 2021-12-31
            • 2022-06-22
            • 1970-01-01
            • 2022-09-30
            • 2021-12-08
            • 1970-01-01
            • 2022-10-24
            相关资源
            最近更新 更多