错误消息“NODE_OPTIONS 中不允许节点:--openssl-legacy-provider”

lok*_*oki 80 node.js npm node-modules

sudo apt upgradeUbuntu\xc2\xa020.04 (Focal Fossa)上更新后出现此问题。

\n

之前我使用的是 Node.js v18.0.0 和 npm 8.7.0 版本,但是更新后出现了问题。我运行了命令nvm install node --reinstall-packages-from=node,但没有帮助。

\n

现在我使用 npm v8.12.1 和 Node.js v18.4.0。

\n

运行命令时npm start,我收到消息:

\n
> mini-app@0.0.0 start\n> cross-env PORT=10888 HTTPS=false react-scripts start --openssl-legacy-provider\n\nnode: --openssl-legacy-provider is not allowed in NODE_OPTIONS\n
Run Code Online (Sandbox Code Playgroud)\n

文件package.json的一部分如下所示:

\n
 "scripts": {\n    "start": "cross-env PORT=10888 HTTPS=false react-scripts start --openssl-legacy-provider",\n    "build": "react-scripts build",\n    "predeploy": "npm run build",\n    "deploy": "vk-miniapps-deploy",\n    "tunnel": "vk-tunnel --insecure=1 --http-protocol=https --ws-protocol=wss --host=localhost --port=10888"\n  },\n
Run Code Online (Sandbox Code Playgroud)\n

我回到了 npm 8.7.0 版本npm install -g npm@8.7.0,但现在甚至 Node.js 版本的输出也显示了相同的错误:

\n
node -v\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
node: --openssl-legacy-provider is not allowed in NODE_OPTIONS\n
Run Code Online (Sandbox Code Playgroud)\n

尝试更新:

\n
nvm install 12.13.0\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
v12.13.0 is already installed.\nNow using node v12.13.0 (npm v)\n
Run Code Online (Sandbox Code Playgroud)\n

bro*_*oox 85

我在 macOS 上遇到了这个问题。从终端,我跑去export检查我的环境变量并看到它NODE_OPTIONS=--openssl-legacy-provider已经设置。然后我只需运行unset NODE_OPTIONS即可再次使用 Node.js。


Aym*_*awy 45

只需运行这个命令

unset NODE_OPTIONS
Run Code Online (Sandbox Code Playgroud)

  • 或在 Windows 中:设置 NODE_OPTIONS= (6认同)

小智 33

对我来说,单独取消设置 NODE_OPTIONS 并不能解决问题。我不得不使用

nvm use v18
Run Code Online (Sandbox Code Playgroud)

来解决问题。

  • 救生员。但我想我之前必须运行“unset NODE_OPTIONS”。 (3认同)

Mic*_*aël 26

通过 NPM 的简单方法。

我们可以在.npmrc文件中设置 SSL 旧版选项。

在我的例子中,Node.JS v18 和 npm v9。

添加或编辑项目文件夹中的.npmrc文件并添加选项:

node-options="--openssl-legacy-provider"
Run Code Online (Sandbox Code Playgroud)

优点:

  • 可以按项目进行管理
  • 项目中的.npmrc文件会提醒我们项目需要更新。
  • 如果它出现在服务器上的另一个项目中,我们仍然会遇到错误。


rim*_*hox 21

在 Linux 上,您需要编辑/etc/ssl/openssl.cnf文件以取消注释几行,以启用旧提供程序支持。

我使用的是Fedora 36;我必须更改这些行:

##[provider_sect]
##default = default_sect
##legacy = legacy_sect
##
##[default_sect]
##activate = 1
##
##[legacy_sect]
##activate = 1
Run Code Online (Sandbox Code Playgroud)

到:

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我必须取消注释该部分,然后删除“node_modules”并再次运行“npm install”。然后它甚至可以在没有“--openssl-legacy-provider”的情况下工作,因为我仍在 Fedora 36 上的节点 v16.14.0 上运行。 (4认同)

kbv*_*hnu 9

快速解决

您可以尝试降级版本。但作为快速解决方案,您可以执行以下选项。

在类 Unix系统(Linux、macOS、Git Bash等)上:

export NODE_OPTIONS=--openssl-legacy-provider
Run Code Online (Sandbox Code Playgroud)

在 Windows 命令提示符下:

set NODE_OPTIONS=--openssl-legacy-provider
Run Code Online (Sandbox Code Playgroud)

在 PowerShell 中:

$env:NODE_OPTIONS = "--openssl-legacy-provider"
Run Code Online (Sandbox Code Playgroud)

阅读更多


小智 8

我正在运行 macOS。我之前使用的是 Node.js 版本 18,它在我的 Node.js 项目中存在此问题:

Error message "error:0308010C:digital envelope routines::unsupported"
Run Code Online (Sandbox Code Playgroud)

我将 Node.js 版本降级到 16 LTS,然后出现以下错误:

node: --openssl-legacy-provider is not allowed in NODE_OPTIONS
Run Code Online (Sandbox Code Playgroud)

只需在终端中运行以下命令即可解决该问题。

unset NODE_OPTIONS
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以尝试对 NODE_OPTIONS 生产变量执行取消设置。可以从命令行完成。

您的 Node.js 版本似乎已经是最新的(版本 18)。根据 GitHub 页面Running code via CLI triggers error: --openssl-legacy-provider is not allowed in NODE_OPTIONS #136599 ,已经处理并解决了类似的问题。


小智 5

我安装了新版本,但它没有使用它。

nvm use node
Run Code Online (Sandbox Code Playgroud)