宋子宪博客

解决 digital envelope routines::unsupported 错误的教程

在使用Node.js 17及以上版本时,开发者可能会遇到如下错误:

ERROR  Error: error:0308010C:digital envelope routines::unsupported

这个错误通常发生在使用WebPack或其他需要加密/解密操作的Node.js项目中。其根本原因是Node.js 17版本引入了更严格的加密算法支持,而某些旧的加密算法或配置在这些版本中不再受支持。

解决方法

方法一:降级Node.js版本

最直接的方法是将Node.js降级到16.x版本,因为这个版本没有这些限制。

  1. 安装nvm(Node Version Manager)

    • 对于macOS/Linux:

      curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
    • 对于Windows,下载并安装 nvm-windows
  2. 使用nvm安装Node.js 16版本

    nvm install 16
    nvm use 16
  3. 验证版本

    node -v

    确认输出的版本是 v16.x.x

方法二:设置环境变量

如果你不想降级Node.js版本,可以通过设置环境变量的方式,让Node.js使用旧的OpenSSL行为。

  1. 设置环境变量

    • Windows

      set NODE_OPTIONS=--openssl-legacy-provider
    • macOS/Linux

      export NODE_OPTIONS=--openssl-legacy-provider
  2. 重新启动开发服务器

    npm run serve

    或者使用你项目的启动命令。

方法三:修改package.json

为了避免每次启动服务器都需要手动设置环境变量,你可以在package.json文件的scripts部分添加该环境变量。

  1. 编辑package.json文件
    scripts部分中,将启动脚本修改为如下格式:

    "scripts": {
      "start": "NODE_OPTIONS=--openssl-legacy-provider webpack serve",
      // 其他脚本
    }
  2. 重新启动开发服务器
    运行你的启动脚本,例如:

    npm run start

方法四:升级相关依赖

有些情况下,错误可能是由于旧版本的依赖不兼容Node.js 17及以上版本导致的。你可以尝试更新相关的依赖包:

  1. 更新compression-webpack-plugin

    npm install compression-webpack-plugin@latest
  2. 确保其他相关依赖包也是最新版本

    npm update

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »