Will's blog Will's blog
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • VUE
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

will

前端小学生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • HTML
  • CSS
  • VUE
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • HTML

  • CSS

  • VUE

    • vue2 截取界面指定区域示例
    • 《优化 Echarts 图表与界面元素自适应:深入探讨 ResizeListener》
    • 表格列宽自适应方案实践
    • Node.js 18+ 版本项目启动报错:OpenSSL 3.0 兼容性问题解决方案
      • 问题描述
      • 问题原因
      • 解决方案
        • 方案一:设置环境变量(推荐)
        • 方案二:降级 Node.js 版本
        • 方案三:更新项目依赖
      • 最佳实践建议
      • 补充说明
      • 参考链接
  • AI

  • REACT

  • 页面
  • VUE
will
2025-05-10
目录

Node.js 18+ 版本项目启动报错:OpenSSL 3.0 兼容性问题解决方案

# Node.js 18+ 版本项目启动报错:OpenSSL 3.0 兼容性问题解决方案

# 问题描述

在使用 Node.js 18+ 版本运行项目时,可能会遇到如下错误:

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

1

这个错误通常出现在启动 Vue、React 等前端项目时,具体错误堆栈如下:

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

    at new Hash (node:internal/crypto/hash:69:19)

    at Object.createHash (node:crypto:133:10)

    at module.exports (/node_modules/webpack/lib/util/createHash.js:135:53)

1
2
3
4

# 问题原因

这个问题的根本原因是 Node.js 18+ 版本默认使用了 OpenSSL 3.0,而一些旧的项目或依赖包可能还在使用旧版本的 OpenSSL 加密方法。在 OpenSSL 3.0 中,一些旧的加密方法被标记为不安全,默认情况下被禁用了。

# 解决方案

# 方案一:设置环境变量(推荐)

在启动项目时,添加 NODE_OPTIONS 环境变量来启用旧版本的 OpenSSL 提供程序:

# Linux/Mac

export NODE_OPTIONS=--openssl-legacy-provider

npm run serve



# Windows

set NODE_OPTIONS=--openssl-legacy-provider

npm run serve

1
2
3
4
5
6
7

# 方案二:降级 Node.js 版本

如果不想修改环境变量,可以考虑降级到 Node.js 16.x 版本,该版本仍然使用 OpenSSL 1.1.1。

# 方案三:更新项目依赖

长期来看,最好的解决方案是更新项目依赖到最新版本,特别是:

  • webpack
  • webpack-dev-server
  • 其他使用加密相关的依赖包

# 最佳实践建议

  1. 在项目文档中明确标注所需的 Node.js 版本
  2. 定期更新项目依赖,特别是涉及到加密相关的包
  3. 在 CI/CD 流程中明确指定 Node.js 版本
  4. 考虑使用 .nvmrc 文件来管理 Node.js 版本

# 补充说明

这个问题在以下场景中比较常见:

  • 使用 Vue CLI 创建的项目
  • 使用 Create React App 创建的项目
  • 使用较旧版本的 webpack 的项目

# 参考链接

  • Node.js 官方文档 (opens new window)
  • OpenSSL 3.0 迁移指南 (opens new window)
  • Webpack 官方文档 (opens new window)

希望这篇博客能帮助到遇到类似问题的开发者。如果您有任何问题或补充,欢迎在评论区讨论。

编辑此页 (opens new window)
#vue
上次更新: 2025/07/17, 10:42:20
表格列宽自适应方案实践
deepSeekv3陪伴女友的智能聊天助手

← 表格列宽自适应方案实践 deepSeekv3陪伴女友的智能聊天助手→

最近更新
01
我用AI写前端代码这一年:从怀疑到真香的转变
09-15
02
基于 Next.js 的无人机数据孪生可视化平台实践
07-17
03
vite 包缓存问题 处理
06-04
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Will | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式