V2EX 09月18日
解决 Vue 项目运行报错:--openssl-legacy-provider 参数配置
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

当你运行旧的 Vue 项目时遇到 "error:0308010c:digital envelope routines::unsupported" 报错,这通常是由于 Node.js 版本过高导致 OpenSSL 兼容性问题。文章介绍了使用 `--openssl-legacy-provider` 参数来解决此问题。文中批评了网上一些不切实际的解决方案,如卸载重装 Node.js 或每次手动添加命令行参数。作者强调了配置化、代码化的解决方案的重要性,并最终推荐在项目根目录下的 `.npmrc` 文件中添加 `node-options=--openssl-legacy-provider`,这是一种简洁、直接且可配置的解决方法,适用于所有操作系统。

📦 **问题根源与兼容性挑战**: 旧的 Vue 项目在运行过程中出现 "error:0308010c:digital envelope routines::unsupported" 报错,其根本原因是本地安装的 Node.js 版本过高,与 OpenSSL 功能存在兼容性问题。这使得项目无法正常启动,影响开发效率。

💡 **批评无效解决方案与强调配置化**: 文章批判了网上流传的几种不实用解决方案,包括卸载高版本 Node.js 安装低版本,以及每次运行 `npm run dev` 前手动添加 `set NODE_OPTIONS=--openssl-legacy-provider` (Windows) 或 `export NODE_OPTIONS=--openssl-legacy-provider` (Unix-like)。作者认为这些方法不够灵活,难以在团队协作中推广,并强调了可配置化、代码化的解决方案的重要性。

✅ **推荐最佳实践:`.npmrc` 文件配置**: 作者认为最简单、最直接且可配置化的解决方案是在项目根目录下创建或修改 `.npmrc` 文件,并添加一行配置 `node-options=--openssl-legacy-provider`。这样,项目在执行 npm 脚本时,Node.js 就会自动应用所需的参数,解决了兼容性问题,且无需每次手动操作,适合团队共享和维护。

事情的起因很简单,在我运行一个老的 vue 项目时候出现了报错:

error:0308010c:digital envelope routines::unsupported

经过简单的查询,我马上找到了根本原因:

我本地安装的 nodejs 版本太高了,在使用 OpenSSL 相关功能的时候有兼容性问题。为此,nodejs 专门提供了一个命令行参数--openssl-legacy-provider ,只要启用了这个参数就没问题了。

重点来了,只要你在网上搜索error:0308010c:digital envelope routines::unsupported这个异常信息,无论是 google 的还是百度的,给的解决方案都十分逆天,归类如下:

1.把高版本卸载掉,装低版本。简直是神仙的不能在神仙的解决方案。

如果回答者提了一嘴 nvm 还能算个正经方案。

以我多年的经验,不知道 nvm 的草台前端开发多的是。

2.在原始的启动命令 npm run dev 前面补充参数设置:

set NODE_OPTIONS=--openssl-legacy-provider && npm run dev

你要是觉得这个答案有简单又完美,我 TM 直接化身户晨风,安卓人安卓思维是吧,这是 window 的命令行才能用,你让苹果设备的同事怎么办??

ok,ok ,你继续搜索发现有质量更高的回答说,

Unix-like 系统在运行 npm run dev 之前执行 export NODE_OPTIONS=--openssl-legacy-provider

Windows 系统则先执行 set NODE_OPTIONS=--openssl-legacy-provider

哇哦,太棒了,简直完美,个屁。你让我每次运行项目之前都额外敲命令行吗??

这种不能配置化、代码化的解决方案,我要是明天来了十个新同事,

有用苹果的有用微软的,我是不是还得一个口头传授这个宝贵经验吗?

哎,其实写到这里我自己都心累了,有兴趣的 bro 你可以自己搜索试试。

我把我自己觉得最简单直接的解决方案写在这个帖子的最后面,欢迎交流。

我专门发这个帖子还有个目的,我在搜索的时候谷歌的 AI 也给了答案,

明显是参考了大量网络上的回答,都是我总结所述的方案,我实在是觉得,

AI 已经不知道烧掉了人类多少亿的资金了,这么小一个问题依然没有给出优质回答。

所以对 AI 感到焦虑的程序员朋友们,不必在意,AI 和我们一样有够草台的。

最后附上我觉得合理的解决方案:

我认为正确处理问题的思路应该是,既然这是 nodejs 的配置问题,

那我在运行这个项目启动 nodejs 的时候给增加所需要的参数就好了。

那我是怎么启动 nodejs 的?通过 npm ,那么 npm 执行 script 的时候,

有没有办法给 node 传参?顺着这个思路,查询 npm 的文档,

最终我认为最简单、最直接、而且能够配置化的解决方案是:

在你项目的.npmrc 文件中增加一行配置:

node-options=--openssl-legacy-provider

(什么?你说你的前端项目从来没用过.npmrc 配置文件,那这是另外一个值得吐槽的草台故事了)

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Vue Node.js OpenSSL npm error:0308010c --openssl-legacy-provider .npmrc 兼容性问题 开发环境配置
相关文章