错误消息“node: --openssl-legacy-provider is not allowed in NODE_OPTIONS”

问题描述 投票:0回答:18

Ubuntu 20.04
(Focal Fossa) 上更新 sudo apt upgrade 后出现此问题。

之前我工作过Node.js v18.0.0和npm 8.7.0版本,但是更新后出现了问题。我运行了命令

nvm install node --reinstall-packages-from=node
,但没有帮助。

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

运行命令

npm start
时,我收到消息:

> [email protected] start
> cross-env PORT=10888 HTTPS=false react-scripts start --openssl-legacy-provider

node: --openssl-legacy-provider is not allowed in NODE_OPTIONS

文件的一部分

package.json
看起来像这样:

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

我回到了 npm 8.7.0 版本,

npm install -g [email protected]
,但现在甚至 Node.js 版本的输出也显示了相同的错误:

node -v
node: --openssl-legacy-provider is not allowed in NODE_OPTIONS

尝试更新:

nvm install 12.13.0

输出:

v12.13.0 is already installed.
Now using node v12.13.0 (npm v)
node.js npm node-modules
18个回答
76
投票

我在 MacOS 上遇到了这个问题。从终端,我运行

export
检查我的环境变量,并看到
NODE_OPTIONS=--openssl-legacy-provider
已设置。然后我简单地运行了
unset NODE_OPTIONS
,然后就能够再次使用节点了。


38
投票

只需运行此命令

unset NODE_OPTIONS

27
投票

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

nvm use v18 

解决问题


22
投票

通过 NPM 的简单方法。

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

在我的例子中,NodeJS v18 和 npm v9

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

node-options="--openssl-legacy-provider"

优点:

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

21
投票

在 Linux 上,您需要编辑

/etc/ssl/openssl.cnf
以取消注释几行以启用旧提供程序支持。

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

##[provider_sect]
##default = default_sect
##legacy = legacy_sect
##
##[default_sect]
##activate = 1
##
##[legacy_sect]
##activate = 1

至:

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1

8
投票

我正在运行 macOS。我之前有 Node Version 18,我的 NodeJs 项目中也有这个问题

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

我将 Node 版本降级到 16 LTS,然后出现了这个错误

node: --openssl-legacy-provider is not allowed in NODE_OPTIONS

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

unset NODE_OPTIONS

希望这有帮助! :)


6
投票

快速修复

您可以尝试降级版本。但作为快速修复,您可以执行以下选项。

在类 Unix 上(Linux、macOS、Git bash 等):

export NODE_OPTIONS=--openssl-legacy-provider

在 Windows 命令提示符下:

set NODE_OPTIONS=--openssl-legacy-provider

在 PowerShell 上:

$env:NODE_OPTIONS = "--openssl-legacy-provider"

了解更多


5
投票

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

您的 Node 版本似乎已经是最新的(版本 18)。根据以下Github链接,已经处理并解决了类似的问题: https://github.com/microsoft/vscode/issues/136599


5
投票

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

nvm use node

2
投票

我对 react-native 也有同样的问题。/gradlew assembleRelease。

通过将节点版本降级到 v18.17.0 并将节点选项设置为

--openssl-legacy-provider

解决了这个问题

命令

nvm install v18

nvm use v18

export NODE_OPTIONS=--openssl-legacy-provider

1
投票

两种修复方法-

方式1

尝试通过运行以下命令重置

NODE_OPTIONS

export NODE_OPTIONS=""

方式2

升级到节点18

nvm use v18

1
投票

使用节点 18.18.2 和

export NODE_OPTIONS=--openssl-legacy-provider
启动脚本:

"scripts": {
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "start": "export NODE_OPTIONS=--openssl-legacy-provider && react-native start",
    "test": "jest",
    "lint": "eslint ."
  },

解决了我的问题


0
投票

将 NVM 更新至 v18,

然后取消设置 NODE_OPTIONS

会好的!


0
投票

以上都是很好的建议。然而,对我有用的是注释位于我的项目文件夹中的 .npmrc 文件中的条目,如图所示 here


0
投票

我也必须运行这个:

nvm install lts

0
投票

我在

yarn start
上遇到错误。下面附上错误截图

现在我通过以下步骤解决了这个问题: 打开 pakage.json 并更改脚本对象

  "scripts": {
  "android": "react-native run-android",
  "build_debug": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res",
  "ios": "react-native run-ios",
  "start": "cross-env NODE_OPTIONS= --openssl-legacy-provider start",
  "test": "jest",
  "lint": "eslint .",
  "android_apk": "npx react-native run-android --variant=release"
  
  },

有了这个

"scripts": {
    
        "android": "react-native run-android",
        "ios": "react-native run-ios",
        "build": "react-native run-android --mode=release",
        "lint": "eslint .",
        "start": "react-native start",
        "test": "jest"
      },

我执行的第二步是在我的 React Native 项目根目录中创建一个 .env 文件,并将以下代码放入其中

NODE_OPTIONS="--openssl-legacy-provider"

再次运行

yarn start
命令


0
投票

对我来说,我在节点 16 上,刚刚升级到节点 v18(NODE_OPTIONS 可能是一个转移注意力的东西)

此外,该变量未导出到环境(因此无法取消设置),而是命令的一部分(在 package.json 中),即“serve”:“set NODE_OPTIONS=--openssl-legacy-provider && vue- cli-service 服务”


-1
投票

当有人可能通过 nvm 使用/迁移到旧版本的 Node JS 时,就会发生这种情况。

两种可能的解决方案

  1. 更改 nvm 以使用节点版本 18 或更高版本
  2. 按照以下步骤从 npmrc 中删除导出 NODE_OPTIONS=--openssl-legacy-provider A。打开~/.npmrc b.从中删除行 export NODE_OPTIONS=--openssl-legacy-provider 并保存
© www.soinside.com 2019 - 2024. All rights reserved.