vue项目启动报错:Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:interna

报错信息

原因分析:

这个错误 error:0308010C:digital envelope routines::unsupported 是由于 Node.js v17+ 中默认加密算法变更导致的。以下是详细的错误原因分析:

根本原因

  1. Node.js 安全策略变更

    • 从 Node.js v17 开始,OpenSSL 的安全策略变得更加严格,默认禁用了一些不安全的哈希算法(如 MD4)。

    • Webpack 和相关插件(如 compression-webpack-plugincopy-webpack-plugin)在处理文件哈希时,可能使用了这些被禁用的算法。

  2. Webpack 依赖问题

    • 部分 Webpack 插件(尤其是较旧版本)在生成资源哈希时使用了 MD4 等算法。

    • 当 Node.js 版本升级到 v17+ 时,这些算法不再被默认支持,导致加密模块抛出 unsupported 错误。

为什么旧版本 Node.js 没有问题?

  • 在 Node.js v16 及以下版本中,OpenSSL 的安全策略较宽松,默认允许使用 MD4 等算法。

  • 因此,同样的 Webpack 配置在旧版本 Node.js 上可以正常工作,升级 Node.js 后才会出现此错误。

解决办法:

方案一:更换低版本的 node.js

方案二:

临时环境变量修改:

在运行打包命令前设置环境变量 NODE_OPTIONS=--openssl-legacy-provider

# Windows (命令提示符) set NODE_OPTIONS=--openssl-legacy-provider 

# Windows (PowerShell) $env:NODE_OPTIONS="--openssl-legacy-provider"

# macOS/Linux NODE_OPTIONS=--openssl-legacy-provider npm run build

或者直接修改 package.json 中的脚本:

 "scripts": {

    "dev": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",

  },

### Vue 项目启动时 OpenSSL 错误解决方案 当使用 Node.js 版本 18 或更高版本运行基于 Vue项目时,可能会遇到 `Error: error:0308010C:digital envelope routines::unsupported` 这一错误。此错误通常是因为 Node.js 升级后默认启用了更安全的加密算法,而某些依赖项可能尚未完全适配这些新标准。 以下是几种常见的解决方法: #### 方法一:降级 Node.js 到兼容版本 如果项目的开发环境支持较低版本的 Node.js,则可以通过工具如 nvm(Node Version Manager)切换到较旧的稳定版本(例如 v16.x)。通过以下命令可以实现节点版本管理: ```bash nvm install 16 nvm use 16 ``` 这种方法能够有效规避因高版本引入的新特性而导致的不兼容问题[^3]。 #### 方法二:设置环境变量以启用遗留 OpenSSl 提供者 对于希望继续使用最新版 Node.js 而又不想修改现有代码的情况,可以在启动脚本前加入特定参数来强制加载旧版 OpenSSL 库。具体操作是在执行构建或服务启动指令之前定义如下环境变量: ```bash export NODE_OPTIONS=--openssl-legacy-provider npm run dev ``` 或者,在 Windows 平台上采用批处理语句形式完成相同效果: ```cmd set NODE_OPTIONS=--openssl-legacy-provider && npm run dev ``` 这种方式无需更改任何源码文件即可快速解决问题[^4]。 #### 方法三:调整 package.json 文件中的脚本部分 另一种持久化上述变更的方法是对 project root 下面的 `package.json` 做适当改动。比如更新 `"scripts"` 字段内的相关内容为下面这样: ```json { "scripts": { "serve": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve", "build": "vue-cli-service build" } } ``` 注意这里针对不同操作系统需分别编写适合其语法习惯的形式;Linux/macOS 用户应改用 export 来代替 set 关键字。 以上三种途径均能有效地缓解乃至彻底消除该类异常现象的发生几率。实际选用哪种方式取决于个人偏好以及团队协作需求等因素综合考量决定。 ```python print("成功解决了Vue项目启动报错的问题") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值