Node.js v17 中的 --openssl-legacy-provider 是什么?

Mee*_*hah 45 javascript openssl node.js

我正在使用 Tailwind 构建一个简单的 React 应用程序。我用过create-react-app然后安装了tailwind。我以前已经做过很多次了。

为了安装 Tailwind,我还必须安装craco并更改package.json “scripts” 以使用craco,如下所示:

"scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  }
Run Code Online (Sandbox Code Playgroud)

然而,这一次,当我运行时npm start,我遇到了一个以前从未遇到过的错误:

Error: error:0308010C:digital envelope routines::unsupported

所以我在StackOverflow上搜索,有人建议添加--openssl-legacy-provider到我的“开始”脚本中,如下所示:

"scripts": {
    "start": "craco --openssl-legacy-provider start",
    "build": "craco build",
    "test": "craco test",
    "eject": "react-scripts eject"
  }
Run Code Online (Sandbox Code Playgroud)

现在正在发挥作用。但有人可以向我解释一下它--openssl-legacy-provider到底是什么以及它是如何工作的吗?

Nik*_*las 8

我看到了许多关于人们由于 Node.js v17 的更改而遇到的 OpenSSL 问题的答案。就我个人而言,在切换到带有 M1 芯片的新 MacBook 后,我在 vue.js/ Electron 应用程序中遇到了这个问题。
此 GitHub 问题列出了适用于不同用户的多个选项。在我的场景中,调整 package.json 文件中的脚本命令有效:

"serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",

"build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
Run Code Online (Sandbox Code Playgroud)

我见过用户用运行命令替换导出。请记住,其他操作系统上的语法可能有所不同。例如:

Set and set
Run Code Online (Sandbox Code Playgroud)

包含所有可能答案的完整问题。


小智 6

由于Node.js v17的更改,--openssl-legacy-provider添加了用于处理OpenSSL v3上的密钥大小。您以某种方式安装了最新版本的节点。

  1. 恢复之前版本的nodejs。
  2. 手动从 package.json 和 packagelock.json 中删除节点依赖项(例如“node”:17.4.3)。
  3. 删除node_modules文件夹并用于npm install重新安装node_modules。

  • 不好了!另一个“降​​级解决一切问题”的答案...作为一名 Java 开发人员,我喜欢 Node.JS...让我想起了 90 年代的 Java。依赖噩梦。解决方案:让自己落后 10 个版本。 (62认同)
  • 有没有办法保留节点 v17+ 并仍然运行它? (6认同)

Akb*_*ali 6

我在 Nuxt 2.15 中遇到了这个错误,我通过以下方式修复了该错误。

package.json编辑

我有 Ubuntu 所以这个方法对我有用

"scripts":{
    "dev":"export SET NODE_OPTIONS=--openssl-legacy-provider && nuxt",
    "build":"export SET NODE_OPTIONS=--openssl-legacy-provider && nuxt build",
    "start":"export SET NODE_OPTIONS=--openssl-legacy-provider && nuxt start",
    "generate":"export SET NODE_OPTIONS=--openssl-legacy-provider && nuxt generate"
  },
Run Code Online (Sandbox Code Playgroud)

我的伙伴有Windows,但是上面的方法不起作用,然后这个方法就起作用了

"scripts":{
    "dev":"SET NODE_OPTIONS=--openssl-legacy-provider && nuxt",
    "build":"SET NODE_OPTIONS=--openssl-legacy-provider && nuxt build",
    "start":"SET NODE_OPTIONS=--openssl-legacy-provider && nuxt start",
    "generate":"SET NODE_OPTIONS=--openssl-legacy-provider && nuxt generate"
  },
Run Code Online (Sandbox Code Playgroud)

最有趣的是它在 Ubuntu 和 Windows 中以其他方式工作

  • `export SET NODE_OPTIONS=--openssl-legacy-provider` 设置两个不同的环境变量:`SET` 和 `NODE_OPTIONS`。这些片段看起来像是货物崇拜编程。不要这样做。 (12认同)