React Native中CodePush读取env配置的versionName报错如何解决?
问题原因
CodePush 的 release-react 命令默认只会解析 gradle.properties 中的静态属性、或者 build.gradle 中的固定取值逻辑,不会触发你项目中配置的 env 环境变量加载流程,因此无法识别 project.env.get() 这类动态取值的写法,才会抛出找不到对应属性的报错。
可行解决方案
方案1:gradle.properties 加默认占位值(无需修改命令,无侵入)
在 android/gradle.properties 中添加版本号的默认静态值,构建时优先使用 env 中的动态值,CodePush 读取时直接取静态占位值即可,两边逻辑互不冲突:
- 打开
android/gradle.properties新增如下配置:
# 给CodePush读取用的默认占位值,实际构建时会被env中的值覆盖 VERSION_NAME=1.0.0 VERSION_CODE=1
- 修改
app/build.gradle中的取值逻辑,增加兜底判断:
... applicationId project.env.get("APP_ID") resValue "string", "app_name", project.env.get("APP_NAME") versionCode project.env.get("VERSION_CODE")?.toInteger() ?: VERSION_CODE.toInteger() versionName project.env.get("VERSION_NAME") ?: VERSION_NAME
配置完成后直接执行原来的 codepush 命令即可正常运行。
方案2:动态读取env值传入命令
如果不想修改gradle配置,可以写个自动化脚本读取.env中的版本号,通过 -t 参数动态传入codepush命令,示例如下:
在 package.json 中新增执行脚本(适配类Unix环境,Windows环境可替换为对应读取逻辑或者用cross-env做跨平台兼容):
{ "scripts": { "codepush:release": "VERSION_NAME=$(grep VERSION_NAME .env | cut -d '=' -f2) && codepush release-react -a <你的组织名> -d Production -t $VERSION_NAME" } }
之后执行 npm run codepush:release 即可自动读取env中的版本号完成发布。
方案3:同步版本号到package.json
CodePush 默认也会读取项目根目录 package.json 中的 version 字段作为版本号取值,你可以写个前置钩子脚本,每次执行codepush命令前自动将.env中的VERSION_NAME同步到package.json的version字段,不需要修改codepush命令即可正常运行。
内容的提问来源于stack exchange,提问作者denistepp
相关产品推荐
相关产品推荐

