Error: error:0308010C:digital envelope routines::unsupported 如何解决
这个错误是由于 Node.js 版本兼容性问题导致的。以下是详细的解决方案:
文章目录
方法一:设置环境变量(最常用)
Windows 系统
命令提示符 (CMD):
set NODE_OPTIONS=--openssl-legacy-provider
npm start
PowerShell:
$env:NODE_OPTIONS="--openssl-legacy-provider"
npm start
一次性设置:
set NODE_OPTIONS=--openssl-legacy-provider && npm start
macOS/Linux 系统
export NODE_OPTIONS=--openssl-legacy-provider
npm start
或一次性设置:
NODE_OPTIONS=--openssl-legacy-provider npm start
方法二:修改 package.json 文件
在 package.json 的 scripts 中添加环境变量:
{
"scripts": {
"dev": "NODE_OPTIONS=--openssl-legacy-provider node server.js",
"start": "NODE_OPTIONS=--openssl-legacy-provider node server.js",
"build": "NODE_OPTIONS=--openssl-legacy-provider react-scripts build"
}
}
方法三:针对不同框架的特定解决方案
React 项目
{
"scripts": {
"start": "react-scripts --openssl-legacy-provider start",
"build": "react-scripts --openssl-legacy-provider build"
}
}
Vue.js 项目
{
"scripts": {
"serve": "NODE_OPTIONS=--openssl-legacy-provider vue-cli-service serve",
"build": "NODE_OPTIONS=--openssl-legacy-provider vue-cli-service build"
}
}
Next.js 项目
{
"scripts": {
"dev": "NODE_OPTIONS=--openssl-legacy-provider next dev",
"build": "NODE_OPTIONS=--openssl-legacy-provider next build"
}
}
方法四:永久性解决方案(推荐)
1. 降级 Node.js 版本
# 使用 nvm 安装 Node.js 16(LTS版本)
nvm install 16.20.2
nvm use 16.20.2
2. 更新项目依赖
# 更新所有依赖到最新版本
npm update
# 或者使用 yarn
yarn upgrade
# 检查是否有安全更新
npm audit fix
方法五:修改 Webpack 配置
如果项目使用 Webpack,在 webpack.config.js 中添加:
const crypto = require('crypto');
module.exports = {
// ...其他配置
output: {
hashFunction: 'sha256'
},
// 或者更详细的配置
experiments: {
futureDefaults: true
}
};
方法六:使用 .env 文件
创建 .env 文件在项目根目录:
NODE_OPTIONS=--openssl-legacy-provider
方法七:Docker 环境
在 Dockerfile 中添加:
ENV NODE_OPTIONS="--openssl-legacy-provider"
验证解决方案
检查解决方案是否生效:
# 查看当前 Node.js 版本
node --version
# 查看环境变量是否设置成功
echo $NODE_OPTIONS # Linux/macOS
echo %NODE_OPTIONS% # Windows
根本原因
这个错误是因为:
- Node.js 17+ 版本使用了 OpenSSL 3.0
- 旧版本的加密算法被标记为"遗留"并默认禁用
- 一些老的工具链或依赖仍在使用这些算法
推荐解决顺序
- 临时解决:使用方法一设置环境变量
- 中期解决:更新项目依赖(方法四)
- 长期解决:降级到 Node.js 16 LTS 或更新所有依赖
建议优先尝试方法一,如果不行再根据你的项目类型选择对应的解决方案。如果问题仍然存在,请告诉我你使用的具体框架和 Node.js 版本,我可以提供更精确的解决方案。
3万+

被折叠的 条评论
为什么被折叠?



