React Native中如何让EAS Update获取Expo Dashboard密钥集成Sentry
解决EAS Update无法获取Expo Dashboard中SENTRY_AUTH_TOKEN的问题
核心原因
EAS Update 默认不会自动加载 Expo Dashboard 中存储的所有 Secrets,仅会读取本地 .env 文件中的变量;而 SENTRY_AUTH_TOKEN 属于构建/更新阶段的服务端密钥,不需要加 EXPO_PUBLIC_ 前缀(这类前缀是给客户端代码暴露变量用的)。
可行解决方案
1. 在 eas.json 中配置 Update 环境变量
这是最规范的长期方案,通过配置让 EAS Update 执行时自动从 Expo Secrets 拉取密钥:
- 确保你已经在 Expo Dashboard 的项目 Secrets 中添加了
SENTRY_AUTH_TOKEN - 修改项目根目录的
eas.json,在update节点下的对应分支配置中注入该密钥:{ "build": { // 保留你现有build配置 }, "update": { "preview": { "channel": "preview", "env": { "SENTRY_AUTH_TOKEN": "@SENTRY_AUTH_TOKEN" } }, "production": { "channel": "production", "env": { "SENTRY_AUTH_TOKEN": "@SENTRY_AUTH_TOKEN" } } } } - 执行更新命令时,EAS 会自动从 Secrets 中拉取对应值注入到环境变量,后续的
npx sentry-expo-upload-sourcemaps dist就能正常读取到SENTRY_AUTH_TOKEN
2. 临时命令行传递(用于单次测试)
如果只是临时执行更新,可以直接在命令中通过 --env 参数指定拉取 Secrets 中的密钥:
eas update --branch preview --env SENTRY_AUTH_TOKEN=@SENTRY_AUTH_TOKEN && npx sentry-expo-upload-sourcemaps dist
3. 本地开发/测试兼容方案
如果需要本地测试 sourcemap 上传,但不想把生产密钥写入 .env:
- 创建
.env.local文件(务必加入.gitignore),写入测试用的SENTRY_AUTH_TOKEN=你的测试密钥 - EAS Update 在本地执行时会优先读取
.env.local,远程执行时则会使用 Expo Secrets 中的生产密钥,避免敏感信息提交到版本控制
注意事项
SENTRY_AUTH_TOKEN是服务端使用的密钥,绝对不要添加EXPO_PUBLIC_前缀,否则会被暴露到客户端代码中- 执行
sentry-expo-upload-sourcemaps必须在eas update完成之后,确保dist目录生成且环境变量已注入
内容的提问来源于stack exchange,提问作者Ale
相关产品推荐
相关产品推荐

