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
相关产品推荐
相关产品推荐

