Node.js运行npm start时出现OpenSSL数字信封例程不支持错误求助
解决npm start时出现的OpenSSL数字信封算法不支持错误
错误原因
Node.js v17及以上版本默认启用OpenSSL 3.0,其中废弃了部分旧算法,但你的项目依赖的webpack或相关加载器(比如babel-loader)还在使用这些被废弃的算法,导致启动时抛出该错误。
解决方法
1. 临时通过环境变量启动
启动项目前先指定兼容模式,不同系统命令不同:
- Windows 命令提示符:
set NODE_OPTIONS=--openssl-legacy-provider && npm start - Windows PowerShell:
$env:NODE_OPTIONS="--openssl-legacy-provider"; npm start - macOS/Linux:
NODE_OPTIONS=--openssl-legacy-provider npm start
2. 修改package.json永久生效
直接修改项目根目录下的package.json,把启动脚本加上环境变量配置:
{ "scripts": { // Windows环境 "start": "set NODE_OPTIONS=--openssl-legacy-provider && react-scripts start", // macOS/Linux环境替换成下面这行 // "start": "NODE_OPTIONS=--openssl-legacy-provider react-scripts start" } }
如果你的项目不是React,把react-scripts start换成对应框架的启动命令即可(比如Vue的vue-cli-service serve)。
3. 降级Node.js版本
如果不想修改配置,可以用Node版本管理器(nvm)将Node.js降级到v16.x或更低版本,这些版本默认使用OpenSSL 1.1.1,不会存在该兼容性问题。
你遇到的错误信息(中文翻译)
错误: error:0308010C:数字信封例程::不支持 在 new Hash (node:internal/crypto/hash:68:19) 在 Object.createHash (node:crypto:138:10) 在 module.exports (D:\Potato-disease-Major-1\frontend\node_modules\webpack\lib\util\createHash.js:135:53) 在 NormalModule._initBuildHash (D:\Potato-disease-Major-1\frontend\node_modules\webpack\lib\NormalModule.js:417:16) 在 D:\Potato-disease-Major-1\frontend\node_modules\webpack\lib\NormalModule.js:452:10 在 D:\Potato-disease-Major-1\frontend\node_modules\webpack\lib\NormalModule.js:323:13 在 D:\Potato-disease-Major-1\frontend\node_modules\loader-runner\lib\LoaderRunner.js:367:11 在 D:\Potato-disease-Major-1\frontend\node_modules\loader-runner\lib\LoaderRunner.js:233:18 在 context.callback (D:\Potato-disease-Major-1\frontend\node_modules\loader-runner\lib\LoaderRunner.js:111:13) 在 D:\Potato-disease-Major-1\frontend\node_modules\babel-loader\lib\index.js:59:103 { opensslErrorStack: [ 'error:03000086:数字信封例程::初始化错误' ], library: '数字信封例程', reason: '不支持', code: 'ERR_OSSL_EVP_UNSUPPORTED' }
内容的提问来源于stack exchange,提问作者M Abdul Fazal
相关产品推荐
相关产品推荐

