升级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
相关产品推荐
相关产品推荐

