Skip to content

nodejs V17 版本及以上运行旧的 vue 项目时的异常问题

启动 vue 项目,报错:error:0308010C:digital envelope routines::unsupported

原因

出现这个错误是因为 node.js V17 版本中最近发布的 OpenSSL3.0, 而 OpenSSL3.0 对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响.

在 node.js V17 以前一些可以正常运行的的应用程序,但是在 V17 版本可能会抛出这个异常。

解决方案

方案一:设置参数

在执行运行项目命令之前,先运行这个命令:

shell
# Linux & Mac OS:
export NODE_OPTIONS=--openssl-legacy-provider
shell
# windows命令提示符:
set NODE_OPTIONS=--openssl-legacy-provider

适用于 Jenkins 自动化构建运行。唯一不足,是每次启动项目都要运行,所以,我们可以把它配置一下。

方案二:修改启动命令

根据你的系统类型,选择一个上面的命令,然后找到项目的 package.json 文件,把自己对应的命令,加上 &&,写到启动项目的配置里面即可。

如果是 Linux 系统,则是:

shell
"scripts": {
   "dev": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
   "serve": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
   "build": "export NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
},

如果是 Windows 系统,则是:

shell
"scripts": {
   "dev": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
   "serve": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve",
   "build": "set NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service build"
},

然后正常使用 npm run dev,npm run serve,npm run build 等命令即可。