在使用Node.js 17及以上版本时,开发者可能会遇到如下错误:
ERROR Error: error:0308010C:digital envelope routines::unsupported
这个错误通常发生在使用WebPack或其他需要加密/解密操作的Node.js项目中。其根本原因是Node.js 17版本引入了更严格的加密算法支持,而某些旧的加密算法或配置在这些版本中不再受支持。
解决方法
方法一:降级Node.js版本
最直接的方法是将Node.js降级到16.x版本,因为这个版本没有这些限制。
安装nvm(Node Version Manager):
对于macOS/Linux:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
- 对于Windows,下载并安装 nvm-windows。
使用nvm安装Node.js 16版本:
nvm install 16 nvm use 16
验证版本:
node -v
确认输出的版本是
v16.x.x
。
方法二:设置环境变量
如果你不想降级Node.js版本,可以通过设置环境变量的方式,让Node.js使用旧的OpenSSL行为。
设置环境变量:
Windows:
set NODE_OPTIONS=--openssl-legacy-provider
macOS/Linux:
export NODE_OPTIONS=--openssl-legacy-provider
重新启动开发服务器:
npm run serve
或者使用你项目的启动命令。
方法三:修改package.json
为了避免每次启动服务器都需要手动设置环境变量,你可以在package.json
文件的scripts
部分添加该环境变量。
编辑
package.json
文件:
在scripts
部分中,将启动脚本修改为如下格式:"scripts": { "start": "NODE_OPTIONS=--openssl-legacy-provider webpack serve", // 其他脚本 }
重新启动开发服务器:
运行你的启动脚本,例如:npm run start
方法四:升级相关依赖
有些情况下,错误可能是由于旧版本的依赖不兼容Node.js 17及以上版本导致的。你可以尝试更新相关的依赖包:
更新
compression-webpack-plugin
:npm install compression-webpack-plugin@latest
确保其他相关依赖包也是最新版本:
npm update