本文介绍: 本文详细描述了nodejs升级后引起的前端老旧项目中构建工具生成hash报错的问题(0308010C:digital envelope routines::unsupported),以及给出的几种解决方案。这几种解决方案各自都存在一些不完美的地方,但都能解决当前构建错误,可以根据自己的实际需求来确定使用哪种方案。
最近,发现自己电脑上的nodejs版本居然还是14+,而最新的已经到了18+,由于并没有使用任何版本管理工具,于是直接升级到了最新的版本(v18.14.1),然后悲剧就发生了。
电脑里以往的绝大部分的Vue和React项目,在执行脚本构建命令如
npm run dev
或
npm run build
时,都出现同样的错误,导致构建失败,并且报类似下面的错误:
查找原因
出现了问题,自然要想办法解决。
在网上搜索了一圈,发现该问题早已出现,一般描述的大致原因就是:当 nodejs
升级到17+版本以后,开始支持 OpenSSL 3.0
,而 OpenSSL 3.0
对各种摘要算法做了更严格的限制,可能会导致一些程序运行错误。
webpack源码与配置
但其实,并不是所有的项目都会出现,比如使用了最新版本的 webpack
工具的项目就能够正常运行,所以得搞清楚其中的具体原因,到底是哪些地方影响了项目运行。
而要搞清原因,还得回到错误信息里,仔细查看上图里的错误信息,可以发现:Error
出现在了 webpack
包的 lib/util/createHash.js
代码文件,查看该文件,可知主要是用于创建hash值,这部分的核心代码如下所示:
从上面的代码,我们可以发现:webpack
的 hash
使用了 nodejs
中的 crypto
加密模块,根据传入的算法名称创建 Hash
对象。
查看nodejs的crypto模块
查看openssl问题
解决方法
升级webpack
提供legacy容器环境
增加系统环境变量
在package.json中添加设置
nodejs版本降级或多版本管理
最后
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。