为什么要加 NODE_OPTIONS=--openssl-legacy-provider?
这不是 Vue 或 vue-cli-service 自己的参数,而是 传给 Node.js 的启动选项。
-
Node 17 起内置 OpenSSL 3.0
和 OpenSSL 1.x 相比,3.0 默认关掉了一些旧算法(例如 Webpack 4 用来做模块标识/哈希时可能用到的 MD4 等)。
-
你这套栈还是 Webpack 4(Vue CLI 4)
构建和开发服务器在跑 Webpack 时,会走到这些旧加密接口,在 OpenSSL 3.0 下就会报:
error:0308010C:digital envelope routines::unsupported。 -
--openssl-legacy-provider的作用让 Node 再加载 旧版算法提供程序 ,这样 Webpack 4 还能像以前一样用那些哈希/摘要,构建和
serve才能正常跑完。 -
为什么要写在
NODE_OPTIONS里?
vue-cli-service serve本质是 用 Node 去执行脚本 。把选项放在环境变量NODE_OPTIONS里,等于 每次启动 Node 都带上这个参数,不用改 Node 安装目录或全局配置。 -
set ... &&是 Windows cmd 的写法只在当前 cmd 会话里设置环境变量,再执行后面的命令。PowerShell 要用
$env:NODE_OPTIONS=...,跨平台更稳妥的是用cross-env(你项目里脚本已经可以这样写)。
总结: 加这一行不是为了"运行时特殊功能",而是为了 在较新的 Node 上兼容旧的 Webpack 4 加密用法 。长期做法是升级 Vue CLI 5 / Webpack 5,就可以不再依赖这个开关。