如何在Expo的app.json中正确使用EAS secret密钥变量?
问题结论
Expo 不支持直接在静态 app.json 文件中读取 EAS Secret 变量。app.json 是纯静态 JSON 文件,EAS 流程不会在解析该文件阶段注入环境变量,直接在 JSON 中写 process.env.SENTRY_AUTH_TOKEN 会被识别为普通字符串,无法读取到实际的密钥值,自然触发配置报错。
官方支持的正确配置方案
官方的标准实现方式是使用动态配置文件替代静态 app.json,具体操作如下:
- 将项目根目录下的
app.json重命名为app.config.js(使用 TypeScript 则命名为app.config.ts),把原有静态配置改为 ESM/CommonJS 导出的对象格式。 - EAS Secret 会在 EAS 云端构建、EAS 钩子执行阶段自动注入到运行环境的
process.env中,动态配置文件执行时可以直接读取到对应值。 - 针对 sentry-expo 的 postPublish 钩子配置,参考如下写法:
export default { expo: { // 此处保留原app.json内的所有配置,比如name、slug、version、plugins等 name: "your-app-name", slug: "your-app-slug", // ...其余原有配置项 hooks: { postPublish: [ { file: "sentry-expo/upload-sourcemaps", config: { organization: "你的Sentry组织标识", project: "你的Sentry项目名", authToken: process.env.SENTRY_AUTH_TOKEN } } ] } } }
本地调试注意事项
本地开发/调试时 EAS 不会自动把云端 Secret 注入到本地环境,需要手动拉取:
- 执行
eas env:pull命令,将项目关联的 EAS Secret 拉取到本地生成.env文件 - 将
.env加入.gitignore规则,避免密钥被提交到代码仓库 - 拉取完成后,本地执行
expo publish、源文件上传等操作时就能正常读取到SENTRY_AUTH_TOKEN的值
注意:不要在静态
app.json中硬编码密钥,也不要尝试通过字符串模板拼接环境变量,JSON 格式本身不支持执行代码逻辑,所有动态配置需求都应该通过app.config.js/ts实现。
内容的提问来源于stack exchange,提问作者HoJin
相关产品推荐
相关产品推荐

