捏麻麻的😡😡😡为什么很简单的前端问题网上搜到的答案质量居然这么差劲

5 天前
 shadowyue

事情的起因很简单,在我运行一个老的 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 配置文件,那这是另外一个值得吐槽的草台故事了)

5674 次点击
所在节点    程序员
78 条回复
deplives
5 天前
@shadowyue #18 [捏麻麻的😡😡😡为什么很简单的前端问题网上搜到的答案质量居然这么差劲]
这是你的标题,
我质疑的是,这么个东西,不需要很复杂的搜索,我 Google 第一条,第一个 SOF 的回复就是这个方案,但是你一直在纠结 npm 要在命令行前面加一个 export 却完全不知道环境变量可以写在 npmrc 中。所以问题不在于搜索到的质量差
mizuki9
5 天前
@mizuki9 里面加一行 node-options="--openssl-legacy-provider"
ultimate42
5 天前
@Vegetable nvm fnm volta 都能锁 node 版本吧,很多开源项目都有个.nvmrc 或者.node-version 的文件,不过我个人喜欢 volta
mizuki9
5 天前
@mizuki9 启动项目用 npm ,就可以了,其他 pnpm ,yarn 不行
mizuki9
5 天前
没看见题主已经给出方案了,我瞎了
dode
5 天前
AI 秒解决
shadowyue
5 天前
@deplives #21
你这要求太高了,知道怎么配置 mac 或者 windows 环境变量的前端开发能有多少?
然后知道配置 npmrc 的前端开发又有多少?
你要知道普通开发只想要答案,你给解释思路是没用的,要把大家都当成草台班子。
shadowyue
5 天前
@dode 啥 AI 这么牛,直接给优质解答了吗
the1812
5 天前
这问题我也遇到过,搜到的都是绕过方法,最后自己研究了下是 webpack 一个插件内部调了 md4 hash ,这玩意高版本 Node 已经废弃删掉了
humbass
5 天前
nvm 不是基本操作吗
syseven
5 天前
多版本切换推荐 https://moonrepo.dev/proto
dode
5 天前
TabGre
5 天前
ci/cd 碰到一次 原因是默认 nodejs 版本更新了 我 TM
shadowyue
5 天前
@dode 你没看我我文章吧,我专门吐槽了 AI 的回答,除了最后的 nvm 版本切换方案,都不算好的办法。
supuwoerc
5 天前
@shadowyue nvm 不好用,很多奇怪的问题,现在都转 volta 或者 fnm 了
mizuki9
5 天前
多版本 node 共存,然后切 node 是可以解决的。
但个人觉得优雅一点的方法是如题主所说,在 .npmrc 中加一行 node-options="--openssl-legacy-provider"
这样在小组中共同开发时,无论每个人用的时高版本还是低版本 node ,都可以直接 npm 运行,无需更多操作
FalconD
5 天前
@shadowyue
Gemini 2.5 Pro w/ built-in search
Prompt:
Persist it for node projects:
NODE_OPTIONS=--openssl-legacy-provider npm run dev
Response:
1.Modifying `package.json` Scripts
2.Using a `.npmrc` file
3.Setting Environment Variables at the OS Level
Citations:
https://stackoverflow.com/questions/77420041/how-to-set-node-options-for-all-package-json-scripts-at-once
shadowyue
5 天前
@FalconD 有没有发现你这个答案的帖子,看过的人少的可怜。
ksjob
5 天前
@supuwoerc 学到了,我去研究研究这个
way2create
5 天前
后端,不懂,遇到过几次,我都选择直接 nvm/pnpm 切 nodejs 版本

感觉这不能说明 AI 草台吧,这已经能解决问题了,而且又不是唯一解

"这是 window 的命令行才能用,你让苹果设备的同事怎么办" 这也没啥好吐槽的吧 知道意思是设置环境变量不就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1160278

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX