React Native中Detox无法读取命令行传入的环境变量
可能导致Detox+Metro环境变量透传失效的配置改动
- Babel配置缺失环境变量注入插件
默认情况下Node环境的变量不会自动注入到RN的JS运行时process.env对象中,如果你修改过babel.config.js,移除或者禁用了babel-plugin-transform-inline-environment-variables插件,所有编译期的环境变量都不会被打包到JS bundle里,运行时自然读取不到。
可以检查babel配置的plugins数组,确认该插件已正确安装并启用,没有添加排除规则过滤自定义变量。
Metro自定义Transformer过滤了环境变量
如果你为Metro配置了自定义的transformer逻辑,或者修改了metro.config.js中的transformer.envWhiteList之类的配置项,只允许指定的环境变量透传,不在白名单内的EMAIL、PASSWORD就会被过滤掉。Detox配置截断了环境变量传递
如果改动过.detoxrc(或.detoxrc.js)的相关配置:- 新增了
environment配置项,显式指定了要传递给构建流程的环境变量,没有包含自定义变量 - 修改了
build命令,在执行xcodebuild前新增了环境变量重置逻辑
以上两种情况都会导致命令行传入的变量没有被带到实际的构建流程中。
- 新增了
脚本层丢失环境变量
如果你的构建命令是嵌套在npm脚本、shell脚本或者nodejs脚本中执行的,要确认中间脚本没有用env -i、unset之类的命令清空环境变量,也没有过滤掉未在脚本中显式声明的自定义变量。第三方环境变量库配置改动
如果你的项目用了react-native-config、react-native-dotenv之类的环境变量管理库,近期改动过这些库的配置,比如修改了允许读取的变量白名单、关闭了编译期注入开关,也会导致自定义变量无法被JS侧读取。
内容的提问来源于stack exchange,提问作者ismaupin
相关产品推荐
相关产品推荐

