theme: cyanosis
在我搭建若依框架的时候,npm run dev搭建服务时总是卡在95%之后爆红。经过排查发现,输入命令
set NODE_OPTIONS=--openssl-legacy-provider
问题解决。

问题现象
执行 npm run dev 时,终端会卡在类似 95% emitting 或 95% module build 之类的进度信息,然后报错。这个问题通常发生在使用 Node.js 17 或更高版本的时候。
问题分析
导致这个问题的核心原因是 Node.js 和 Webpack 之间的兼容性问题。具体来说:
- 从 Node.js 17 开始,Node.js 默认使用 OpenSSL 3 来处理加密操作,而 OpenSSL 3 对一些旧的加密方法和算法的支持发生了变化。许多前端框架,如 Vue.js 和 React.js,在使用 Webpack 进行模块打包和热替换时,可能依赖于这些旧的加密方法。
- Webpack 及其插件或依赖项在处理加密时,可能使用了 OpenSSL 的旧版本算法。如果这些插件或模块没有更新,导致与 OpenSSL 3 不兼容,从而导致运行时报错。
为什么这个命令可以解决问题?
当你执行 set NODE_OPTIONS=--openssl-legacy-provider 时,这一命令的作用是告诉 Node.js 使用 OpenSSL 的“旧版加密提供程序”(legacy provider)。它会让 Node.js 重新启用对旧版加密算法的支持,从而解决与 Webpack 或其他依赖项的兼容性问题。
简单来说,这一设置相当于让 Node.js 回到之前支持旧加密算法的模式,这样就不会再因为 OpenSSL 版本的变化而导致报错。
具体步骤
在项目根目录下,打开终端或命令行工具。
输入以下命令:
set NODE_OPTIONS=--openssl-legacy-provider注意:如果你使用的是 macOS 或 Linux,命令格式应为:
export NODE_OPTIONS=--openssl-legacy-provider再次运行
npm run dev,你会发现问题已经解决,项目可以正常启动。
如果在若依框架或其他基于 Vue.js 的前端项目中遇到 npm run dev 卡在 95% 之后报错的问题,多半是因为 Node.js 和 Webpack 之间的兼容性问题。通过设置 NODE_OPTIONS=--openssl-legacy-provider 可以让 Node.js 兼容旧版的加密方式,从而解决这个问题。