解决Node.js与OpenSSL 3.0不兼容问题

解决Node.js与OpenSSL 3.0不兼容问题

在某些情况下,使用 Node.js 17 或更高版本时,可能会遇到与 crypto 库有关的错误。这主要是因为 Node.js 17 引入了对 OpenSSL 3.0 的支持,该版本对于一些 API 进行了重大更改,这可能导致与某些 Node.js 库或依赖项的不兼容。

错误描述

以下是错误的示例:

Error: error:0308010C:digital envelope routines::unsupported
...
code: 'ERR_OSSL_EVP_UNSUPPORTED'

解决方案

为了解决与 OpenSSL 3.0 的不兼容问题,Node.js 提供了 --openssl-legacy-provider 选项,但这并不总是有效。

一种有效的解决方法是退回到 Node.js 16,这是一个长期支持(LTS)版本,并且不包括 OpenSSL 3.0 的支持。

使用NVM切换Node.js版本

NVM (Node Version Manager) 是一个非常方便的工具,允许在同一台机器上安装、管理和切换多个 Node.js 版本。

安装NVM
  1. 访问NVM GitHub 仓库 获取安装指南。
  2. 对于大多数用户,只需在终端运行以下命令即可:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
使用NVM切换Node.js版本
  1. 安装 Node.js 16
nvm install 16
  1. 切换至 Node.js 16 版本
nvm use 16

这样,就切换到了 Node.js 16,并且应该不会再遇到与 OpenSSL 3.0 不兼容的问题。

0 info it worked if it ends with ok 1 verbose cli [ 1 verbose cli &#39;E:\\nodeNvm\\nodejs\\node.exe&#39;, 1 verbose cli &#39;E:\\nodeNvm\\nodejs\\node_modules\\npm\\bin\\npm-cli.js&#39;, 1 verbose cli &#39;run&#39;, 1 verbose cli &#39;dev&#39; 1 verbose cli ] 2 info using npm@6.14.13 3 info using node@v14.17.3 4 verbose run-script [ &#39;predev&#39;, &#39;dev&#39;, &#39;postdev&#39; ] 5 info lifecycle ruoyi@3.8.5~predev: ruoyi@3.8.5 6 info lifecycle ruoyi@3.8.5~dev: ruoyi@3.8.5 7 verbose lifecycle ruoyi@3.8.5~dev: unsafe-perm in lifecycle true 8 verbose lifecycle ruoyi@3.8.5~dev: PATH: E:\nodeNvm\nvm\v14.17.3\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;E:\work\communalization_manage_sxyd\node_modules\.bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\System32\HWAudioDriver;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;E:\maven\apache-maven-3.9.6\bin;E:\Java\jdk1.8.0_73\bin;E:\MySQL\MySQL Server 8.0\bin;E:\Redis;E:\VScode\Microsoft VS Code\bin;E:\Xshell\;E:\Java\jdk1.8.0_73\jre\bin;E:\GIT\Git\cmd;E:\Tencent\微信web开发者工具\dll;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;E:\Xftp\;E:\nodeNvm\nvm;E:\nodeNvm\nodejs;E:\nodeNvm\nvm\node_global;C:\Users\22782\AppData\Local\Microsoft\WindowsApps;E:\nodeNvm\nvm;E:\nodeNvm\nodejs; 9 verbose lifecycle ruoyi@3.8.5~dev: CWD: E:\work\communalization_manage_sxyd 10 silly lifecycle ruoyi@3.8.5~dev: Args: [ 10 silly lifecycle &#39;/d /s /c&#39;, 10 silly lifecycle &#39;set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve&#39; 10 silly lifecycle ] 11 silly lifecycle ruoyi@3.8.5~dev: Returned: code: 9 signal: null 12 info lifecycle ruoyi@3.8.5~dev: Failed to exec dev script 13 verbose stack Error: ruoyi@3.8.5 dev: `set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve` 13 verbose stack Exit status 9 13 verbose stack at EventEmitter.<anonymous> (E:\nodeNvm\nvm\v14.17.3\node_modules\npm\node_modules\npm-lifecycle\index.js:332:16) 13 verbose stack at EventEmitter.emit (events.js:375:28) 13 verbose stack at ChildProcess.<anonymous> (E:\nodeNvm\nvm\v14.17.3\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14) 13 verbose stack at ChildProcess.emit (events.js:375:28) 13 verbose stack at maybeClose (internal/child_process.js:1055:16) 13 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:288:5) 14 verbose pkgid ruoyi@3.8.5 15 verbose cwd E:\work\communalization_manage_sxyd 16 verbose Windows_NT 10.0.26100 17 verbose argv "E:\\nodeNvm\\nodejs\\node.exe" "E:\\nodeNvm\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "dev" 18 verbose node v14.17.3 19 verbose npm v6.14.13 20 error code ELIFECYCLE 21 error errno 9 22 error ruoyi@3.8.5 dev: `set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve` 22 error Exit status 9 23 error Failed at the ruoyi@3.8.5 dev script. 23 error This is probably not a problem with npm. There is likely additional logging output above. 24 verbose exit [ 9, true ] 解决方法
03-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值