You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Node.js到v18.20.4后Ionic构建报错ERR_OSSL_EVP_UNSUPPORTED

Node.js升级至v18.20.4后Ionic构建出现ERR_OSSL_EVP_UNSUPPORTED错误的解决方法

问题描述

将Node.js从v16.20.2升级到v18.20.4后,执行ionic build命令时出现ERR_OSSL_EVP_UNSUPPORTED错误,此前使用v16.20.2版本可正常构建。已尝试设置NODE_OPTIONS=--openssl-legacy-provider但未解决问题,且不希望通过降级Node.js版本来处理。

当前环境配置

Ionic CLI                     : 7.2.0 
Ionic Framework               : @ionic/angular 5.9.4
@angular-devkit/build-angular : 0.1101.4
@angular-devkit/schematics    : 11.1.4
@angular/cli                  : 11.1.4
@ionic/angular-toolkit        : 12.1.1

Capacitor:

Capacitor CLI      : 6.1.2
@capacitor/android : 6.1.2
@capacitor/core    : 6.1.2
@capacitor/ios     : 6.1.2

Utility:

cordova-res : not installed globally
native-run  : 2.0.1

System:

NodeJS : v18.20.4 (C:\Program Files\nodejs\node.exe)
npm    : 10.9.0
OS     : Windows 10

错误信息

ionic build
> ng.cmd run app:build
- Generating browser application bundles...node:internal/crypto/hash:69
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:69:19)
    at Object.createHash (node:crypto:133:10)
    at module.exports (F:\app\node_modules\webpack\lib\util\createHash.js:135:53)
    at NormalModule._initBuildHash (F:\app\node_modules\webpack\lib\NormalModule.js:417:16)
    at F:\app\node_modules\webpack\lib\NormalModule.js:452:10
    at F:\app\node_modules\webpack\lib\NormalModule.js:323:13
    at F:\app\node_modules\loader-runner\lib\LoaderRunner.js:367:11
    at F:\app\node_modules\loader-runner\lib\LoaderRunner.js:172:11
    at loadLoader (F:\app\node_modules\loader-runner\lib\loadLoader.js:32:11)
    at iteratePitchingLoaders (F:\app\node_modules\loader-runner\lib\LoaderRunner.js:169:2)
    at iteratePitchingLoaders (F:\app\node_modules\loader-runner\lib\LoaderRunner.js:165:10)
    at F:\app\node_modules\loader-runner\lib\LoaderRunner.js:176:18
    at loadLoader (F:\app\node_modules\loader-runner\lib\loadLoader.js:47:3)
    at iteratePitchingLoaders (F:\app\node_modules\loader-runner\lib\LoaderRunner.js:169:2)
    at runLoaders (F:\app\node_modules\loader-runner\lib\LoaderRunner.js:365:2)
    at NormalModule.doBuild (F:\app\node_modules\webpack\lib\NormalModule.js:295:3) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

解决方案

1. 确保NODE_OPTIONS正确生效(Windows环境)

Windows下环境变量作用域可能导致单独设置不生效,直接在命令行附带参数执行:

set NODE_OPTIONS=--openssl-legacy-provider && ionic build

PowerShell环境则使用:

$env:NODE_OPTIONS="--openssl-legacy-provider"; ionic build

2. 升级Angular及相关依赖

当前@angular-devkit/build-angular为0.1101.4(对应Angular 11),该版本Webpack不兼容Node.js 18的OpenSSL标准,建议升级到兼容版本:

  • 升级Angular CLI:
npm install @angular/cli@^14 --save-dev
  • 同步升级构建工具:
npm install @angular-devkit/build-angular@^14 @angular-devkit/schematics@^14 --save-dev
  • 匹配升级Ionic工具包:
npm install @ionic/angular-toolkit@^7 --save-dev

3. 修改package.json构建脚本

将环境变量嵌入构建命令,避免作用域问题:

{
  "scripts": {
    "build": "set NODE_OPTIONS=--openssl-legacy-provider && ionic build"
  }
}

之后执行npm run build代替直接调用ionic build。

4. 自定义Webpack哈希算法(如有自定义配置)

如果项目有自定义Webpack配置文件,指定兼容的哈希算法:

module.exports = {
  // 其他配置项
  output: {
    hashFunction: 'sha256'
  }
};

内容的提问来源于stack exchange,提问作者Deepak Dholiyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 02:37:36