在
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)
我在 MacOS 上遇到了这个问题。从终端,我运行
export
检查我的环境变量,并看到 NODE_OPTIONS=--openssl-legacy-provider
已设置。然后我简单地运行了unset NODE_OPTIONS
,然后就能够再次使用节点了。
unset NODE_OPTIONS
对我来说,单独取消设置 NODE_OPTIONS 并不能解决问题,必须使用
nvm use v18
解决问题
我们可以在 .npmrc 文件中设置 SSL 旧版选项。
在我的例子中,NodeJS v18 和 npm v9
node-options="--openssl-legacy-provider"
在 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
我正在运行 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
希望这有帮助! :)
快速修复
您可以尝试降级版本。但作为快速修复,您可以执行以下选项。
在类 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"
您可以尝试对 NODE_OPTIONS 生产变量执行取消设置。可以从命令行完成。
您的 Node 版本似乎已经是最新的(版本 18)。根据以下Github链接,已经处理并解决了类似的问题: https://github.com/microsoft/vscode/issues/136599
我安装了新版本但没有使用
nvm use node
我对 react-native 也有同样的问题。/gradlew assembleRelease。
通过将节点版本降级到 v18.17.0 并将节点选项设置为
--openssl-legacy-provider
解决了这个问题
命令
nvm install v18
nvm use v18
export NODE_OPTIONS=--openssl-legacy-provider
两种修复方法-
尝试通过运行以下命令重置
NODE_OPTIONS
export NODE_OPTIONS=""
升级到节点18
nvm use v18
使用节点 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 ."
},
解决了我的问题
将 NVM 更新至 v18,
然后取消设置 NODE_OPTIONS
会好的!
我也必须运行这个:
nvm install lts
我在
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
命令
对我来说,我在节点 16 上,刚刚升级到节点 v18(NODE_OPTIONS 可能是一个转移注意力的东西)
此外,该变量未导出到环境(因此无法取消设置),而是命令的一部分(在 package.json 中),即“serve”:“set NODE_OPTIONS=--openssl-legacy-provider && vue- cli-service 服务”
当有人可能通过 nvm 使用/迁移到旧版本的 Node JS 时,就会发生这种情况。
两种可能的解决方案