新node运行老项目,digital envelope routines::unsupported
发布于 作者:苏南大叔 来源:程序如此灵动~

平心而论,nodejs
程序的一个大弊病就是:第三方依赖太多,老程序过一年就跑不起来了,各种依赖版本报错。所以,才会需要对第三方版本库进行lock
处理。但是,并没有锁定node
版本的说法。这可能就是本文所描述的问题的背景信息。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验文章。本文测试环境:win10
,nodejs@20.18.0
。测试代码的库版本:webpack@5.26.3
,react@17.0.2
,react-router-dom@6.16.0
。
错误代码
执行定义在package.json
里面的脚本:
得到错误信息:
这个错误提示信息,一看就懵。

解决方案一
解决方案呢,就是给node
程序加个环境变量。名为:NODE_OPTIONS
,值为--openssl-legacy-provider
。
根据下面这两篇文章的内容,提出合理的解决方案,进行解决。
对于win10
环境下来说,有如下选择:
原命令:
新命令(win
):
或者
注意:--openssl-legacy-provider
最开始的是两个英文中划线。另外,使用&&
符合的时候,前面没有空格没有空格!
意思就是:
在原命令前面,增加一个全局的变量:NODE_OPTIONS=--openssl-legacy-provider
,用set
增加还是用cross-env
增加,就看你方便了。
解决方案二
如果没有特定理由,非要使用当前高版本node
的话,降级到合适的node
版本号,也是个明智的选择。
结束语
本文的命令代码,仅仅是做个兼容,并非最佳解决方案。其实调试nodejs
的老项目代码,是一件非常痛苦的事情。


