目 录CONTENT

文章目录

node 更新版本后,原项目编译报错 Error: error:0308010C:digital envelope routines::unsupported

过客
2025-06-27 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

之前有一个Ant Design 4的项目,最近将node升到了最新的v22.x版本,然后,编译的时候就报错了。

yarn run v1.22.22
$ react-scripts build
Creating an optimized production build...
Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:79:19)
    at Object.createHash (node:crypto:139:10)
    at module.exports (F:\work\web\background\node_modules\webpack\lib\util\createHash.js:90:53)
    at NormalModule._initBuildHash (F:\work\web\background\node_modules\webpack\lib\NormalModule.js:401:16)
    at handleParseError (F:\work\web\background\node_modules\webpack\lib\NormalModule.js:449:10)
    at F:\work\web\background\node_modules\webpack\lib\NormalModule.js:481:5
    at F:\work\web\background\node_modules\webpack\lib\NormalModule.js:342:12
    at F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:373:3
    at iterateNormalLoaders (F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
    at iterateNormalLoaders (F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
    at F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:236:3
    at runSyncOrAsync (F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:130:11)
    at iterateNormalLoaders (F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:232:2)
    at Array.<anonymous> (F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
    at Storage.finished (F:\work\web\background\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:43:16)
    at F:\work\web\background\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:79:9
(node:8344) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
F:\work\web\background\node_modules\react-scripts\scripts\build.js:19
  throw err;
  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:79:19)
    at Object.createHash (node:crypto:139:10)
    at module.exports (F:\work\web\background\node_modules\webpack\lib\util\createHash.js:90:53)
    at NormalModule._initBuildHash (F:\work\web\background\node_modules\webpack\lib\NormalModule.js:401:16)
    at F:\work\web\background\node_modules\webpack\lib\NormalModule.js:433:10
    at F:\work\web\background\node_modules\webpack\lib\NormalModule.js:308:13
    at F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:367:11
    at F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:233:18
    at context.callback (F:\work\web\background\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
    at F:\work\web\background\node_modules\babel-loader\lib\index.js:51:103
    at process.processTicksAndRejections (node:internal/process/task_queues:105:5) {
  opensslErrorStack: [
    'error:03000086:digital envelope routines::initialization error',
    'error:0308010C:digital envelope routines::unsupported'
  ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

Node.js v22.16.0
error Command failed with exit code 1.

这是Node升到17及以上版本后,默认启用OpenSSL 3.0,移除了对旧加密算法(如MD4/MD5)的支持,解决办法有三种:

一、强制启用旧版OpenSSL提供程序

修改项目下的package.json文件,在scripts中编译常数添加NODE_OPTIONS=--openssl-legacy-provider,如:

## Windows 中
"scripts": {
    "start": "set NODE_OPTIONS=--openssl-legacy-provider && react-scripts start",
    "build": "set NODE_OPTIONS=--openssl-legacy-provider && react-scripts build"
  }

## Linux/macOS中
"scripts": {
    "start": "export NODE_OPTIONS=--openssl-legacy-provider && react-scripts start",
    "build": "export NODE_OPTIONS=--openssl-legacy-provider && react-scripts build"
  }
  • 适用于开发环境快速恢复编译

二、降级Node.js至V16及改下版本

使用nvm管理多版本:

nvm install 16.20.2   # 安装Node v16 
nvm use 16.20.2       # 切换版本
  • 彻底规避OpenSSL 3.0兼容问题,适合长期维护的老项目

三、升级项目依赖

更新关键依赖

npm update webpack compression-webpack-plugin --save-dev
  • compression-webpack-plugin:升级至v10+
  • webpack:升级至v5+,并在配置中显式声明哈希算法:
// webpack.config.js
output: {
    hashFunction: "sha256", // 替换旧版MD类算法
}

不过,我的项目是Ant Design 4的,要将webpack更新到v5以上版本,需要更新antdant-design/compatible等等一大堆的依赖库,还要修改代码,最后,还是放弃了,使用旧版本。

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区