Vue/React报错digital envelope routines::unsupported

373 阅读1分钟

一个vue2的项目,本机新装nodejs-v18.16.1,pnpm install 之后,pnpm dev 报这个错误。

解决方案:设置nodejs的环境变量为--openssl-legacy-provider,启用OpenSSL3.0的旧版算法支持。

具体操作如下(三选一即可,推荐1项目内处理):

方法1. 项目内处理(Vue为例,React请自行参考),修改package.json的运行命令,vue-cli-service 命令替换为 node 带 --openssl-legacy-provider 参数直接运行 vue-cli-service.js,代码样例:

# 本地serve运行
node --openssl-legacy-provider ./node_modules/@vue/cli-service/bin/vue-cli-service.js serve
# 本地build打包
node --openssl-legacy-provider ./node_modules/@vue/cli-service/bin/vue-cli-service.js build

方法2. 全局处理,系统配置nodejs环境参数,如下:

macOS终端,或者Linux和Windows的Git Bash 执行以下命令

export NODE_OPTIONS=--openssl-legacy-provider        

Windows CMD命令行执行以下命令

set NODE_OPTIONS=--openssl-legacy-provider

Windows PowerShell终端执行以下命令

$env:NODE_OPTIONS="--openssl-legacy-provider"

Docker,在Dockerfile中增加配置
ENV NODE_OPTIONS="--openssl-legacy-provider"

方法3. nodejs降级到16.x

好了,愿意多看一下的,这里解释一下错误原因,nodejs-17.x 将MD4算法移动到了 OpenSSL3.0 的旧版算法支持中,旧版算法支持是已过时的不安全算法集合,默认情况下旧版算法支持是关闭的,也就是默认不支持MD4,Webpack的加密算法有部分是基于MD4的,所以直接运行会报错。

另外,nodejs-16.x 是使用的 OpenSSL1 ,直接支持MD4。

建议看一下参考资料,英文解释的更准确。如有谬误请留言指出,感谢!

参考资料:www.datainfinities.com/49/error-03…