You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo SDK 50中expo-updates无--public-url的配置求助

Expo SDK 50 中 expo-updates 替代 --public-url 的方案(裸项目 + S3 托管 + 无需 EAS)

1. 替代 --public-url 的配置方式

SDK 50 移除了--public-url参数后,所有更新相关配置需通过项目的app.json/app.config.js或expo-updates.config.js定义,核心是指定更新清单的URL和资产托管路径:

在app.json的expo.updates字段中添加如下配置:

{
  "expo": {
    "updates": {
      "enabled": true,
      "runtimeVersion": "1.0.0", // 原生依赖变更时必须更新此版本
      "url": "https://your-s3-bucket.s3.amazonaws.com/updates/index.json", // S3上更新清单的公网地址
      "assetBundlePatterns": [
        "**/*" // 指定需要托管的所有资产文件
      ]
    }
  }
}

这里的url指向S3上托管的更新清单文件index.json,所有资产文件需与该清单保持对应路径关系。

2. S3 托管资产的具体步骤

  • 构建更新包:针对裸项目,运行npx expo export --platform ios或npx expo export --platform android,生成包含资产和更新清单的dist目录。
  • 上传到S3:将dist目录下的所有文件(包括index.json、bundle.js及各类静态资源)上传到S3 bucket的指定路径(比如updates/)。确保S3文件设置了公开可读权限,或通过bucket策略限制合法客户端访问。
  • 验证配置:检查app.json中的updates.url是否与S3上index.json的实际公网URL完全一致。

3. 无需使用 EAS 的可行性

完全可以脱离EAS服务实现自定义更新:

  • 裸项目需确保已安装expo-updates依赖:运行npx expo install expo-updates,iOS端额外执行npx pod-install,Android端确认gradle配置中已引入expo-updates模块。
  • 手动管理更新流程:在App启动逻辑中调用Updates.checkForUpdateAsync()检查更新,通过Updates.fetchUpdateAsync()下载并应用更新。
  • 维护runtimeVersion:当原生依赖(如SDK版本、原生插件)发生变更时,必须更新runtimeVersion,避免旧客户端加载不兼容的更新包。

内容的提问来源于stack exchange,提问作者Agostinho Quintela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:43:16