新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
里面的脚本:
webpack --config webpack.config.server.js
得到错误信息:
\node_modules\loader-runner\lib\LoaderRunner.js:146
if(isError) throw e;
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:79:19)
at Object.createHash (node:crypto:139:10)
at BulkUpdateDecorator.hashFactory (\node_modules\webpack\lib\util\createHash.js:144:18)
at BulkUpdateDecorator.update (\node_modules\webpack\lib\util\createHash.js:46:50)
at RawSource.updateHash (\node_modules\webpack-sources\lib\RawSource.js:64:8)
at NormalModule._initBuildHash (\node_modules\webpack\lib\NormalModule.js:804:17)
at handleParseResult (\node_modules\webpack\lib\NormalModule.js:869:10)
at \node_modules\webpack\lib\NormalModule.js:960:4
at processResult (\node_modules\webpack\lib\NormalModule.js:691:11)
at \node_modules\webpack\lib\NormalModule.js:743:5 {
opensslErrorStack: [
'error:03000086:digital envelope routines::initialization error',
'error:0308010C:digital envelope routines::unsupported'
],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v20.18.0
这个错误提示信息,一看就懵。
解决方案一
解决方案呢,就是给node
程序加个环境变量。名为:NODE_OPTIONS
,值为--openssl-legacy-provider
。
根据下面这两篇文章的内容,提出合理的解决方案,进行解决。
对于win10
环境下来说,有如下选择:
原命令:
webpack --config webpack.config.server.js
新命令(win
):
set NODE_OPTIONS=--openssl-legacy-provider&& webpack --config webpack.config.server.js
或者
cross-env NODE_OPTIONS=--openssl-legacy-provider webpack --config webpack.config.server.js
注意:--openssl-legacy-provider
最开始的是两个英文中划线。另外,使用&&
符合的时候,前面没有空格没有空格!
意思就是:
在原命令前面,增加一个全局的变量:NODE_OPTIONS=--openssl-legacy-provider
,用set
增加还是用cross-env
增加,就看你方便了。
解决方案二
如果没有特定理由,非要使用当前高版本node
的话,降级到合适的node
版本号,也是个明智的选择。
结束语
本文的命令代码,仅仅是做个兼容,并非最佳解决方案。其实调试nodejs
的老项目代码,是一件非常痛苦的事情。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。