React Native项目配置CodePush时遇构建转换器失败错误
解决React Native CodePush命令执行时的"error:0308010C:digital envelope routines::unsupported"错误
这个错误是Node.js 17及以上版本默认启用OpenSSL 3.0加密算法,而Metro缓存模块(stableHash.js)依赖的旧加密算法不兼容导致的,以下是几种解决办法:
临时单次解决
- Windows 命令提示符:先执行
set NODE_OPTIONS=--openssl-legacy-provider,再运行你的CodePush命令(比如code-push release-react MyApp android) - Windows PowerShell:先执行
$env:NODE_OPTIONS="--openssl-legacy-provider",再运行CodePush命令 - macOS/Linux:直接在命令前加环境变量,比如
NODE_OPTIONS=--openssl-legacy-provider code-push release-react MyApp ios
项目级永久解决
修改项目根目录的package.json,给CodePush相关命令添加环境变量:
- 单平台项目直接修改scripts:
(Windows用"scripts": { "codepush-android": "set NODE_OPTIONS=--openssl-legacy-provider && code-push release-react MyApp android", "codepush-ios": "NODE_OPTIONS=--openssl-legacy-provider code-push release-react MyApp ios" }&&连接命令,macOS/Linux直接用空格分隔) - 跨平台项目用
cross-env统一处理:- 先安装依赖:
npm install cross-env --save-dev - 修改scripts:
"scripts": { "codepush-android": "cross-env NODE_OPTIONS=--openssl-legacy-provider code-push release-react MyApp android", "codepush-ios": "cross-env NODE_OPTIONS=--openssl-legacy-provider code-push release-react MyApp ios" }
- 先安装依赖:
降级Node.js版本
如果不想折腾环境变量,可以把Node.js降级到16.x或更低版本(这些版本使用OpenSSL 1.1.1,无兼容性问题):
- 用nvm管理版本的话,执行
nvm install 16安装16版本 - 切换版本:
nvm use 16 - 可选设置默认版本:
nvm alias default 16
内容的提问来源于stack exchange,提问作者Ankit Vora
相关产品推荐
相关产品推荐

