一个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。
建议看一下参考资料,英文解释的更准确。如有谬误请留言指出,感谢!