react-native-update-cli
v2.20.0
Published
command line tool for react-native-update (remote updates for react native)
Maintainers
Readme
React Native Update CLI
React Native Update 命令行工具,用于打包、上传原生包、发布 OTA 版本,以及管理应用和包。
功能
- 统一的
pushy/crescCLI 入口 - 保持既有命令兼容
- 可用于构建脚本和 CI/CD 的 Provider API
- 提供 TypeScript 类型定义
安装
npm install react-native-update-cli基础用法
npx pushy help
npx pushy list
npx pushy bundle --platform ios
npx pushy publish --platform ios --name 1.0.0
npx pushy uploadIpa ./app.ipa编程调用
import { CLIProviderImpl } from 'react-native-update-cli';
const provider = new CLIProviderImpl();
const bundleResult = await provider.bundle({
platform: 'ios',
dev: false,
sourcemap: true,
});
if (!bundleResult.success) {
throw new Error(bundleResult.error);
}
const publishResult = await provider.publish({
filePath: '.pushy/output/ios.ppk',
platform: 'ios',
name: 'v1.2.3',
description: 'Bug fixes and improvements',
rollout: 100,
});内置命令
Bundle
bundle: 打包 JavaScript 代码,可选择发布hdiff: 基于两个 PPK 文件生成 hdiffhdiffFromApk: 基于 APK 文件生成 hdiffhdiffFromApp: 基于 APP 文件生成 hdiffhdiffFromIpa: 基于 IPA 文件生成 hdiff
Version
publish: 发布新版本versions: 列出版本update: 更新版本包规则updateVersionInfo: 更新版本元信息deleteVersion: 删除版本
App
createApp: 创建应用apps: 列出应用selectApp: 选择应用deleteApp: 删除应用
Package
uploadIpa: 上传 IPA 文件uploadApk: 上传 APK 文件uploadAab: 上传 AAB 文件uploadApp: 上传 APP 文件parseApp: 解析 APP 文件信息parseIpa: 解析 IPA 文件信息parseApk: 解析 APK 文件信息parseAab: 解析 AAB 文件信息extractApk: 从 AAB 提取通用 APKpackages: 列出包deletePackage: 删除包
User
login: 登录logout: 退出登录me: 查看当前用户信息
Provider API
interface CLIProvider {
bundle(options: BundleOptions): Promise<CommandResult>;
publish(options: PublishOptions): Promise<CommandResult>;
upload(options: UploadOptions): Promise<CommandResult>;
getSelectedApp(
platform?: Platform,
): Promise<{ appId: string; platform: Platform }>;
listApps(platform?: Platform): Promise<CommandResult>;
createApp(name: string, platform: Platform): Promise<CommandResult>;
listVersions(appId: string): Promise<CommandResult>;
updateVersion(
appId: string,
versionId: string,
updates: Partial<Version>,
): Promise<CommandResult>;
getPlatform(platform?: Platform): Promise<Platform>;
loadSession(): Promise<Session>;
}环境变量
publish 需要通过 filePath 传入已生成的 .ppk 文件路径。Provider 的列表方法会把数据放在 CommandResult.data,不会进入交互式翻页。
export PUSHY_REGISTRY=https://your-api-endpoint.com
export NO_INTERACTIVE=trueSentry Sourcemap
当项目存在 ios/sentry.properties 或 android/sentry.properties 时,bundle 会为 OTA 包上传 sourcemap。默认使用 Sentry Debug ID 匹配,不再根据原生包推导 release/dist。
React Native 项目需要在 metro.config.js 中接入 @sentry/react-native/metro,确保生成的 bundle 和 sourcemap 带有相同 Debug ID。Hermes 场景下 CLI 会把 packager sourcemap 的 Debug ID 复制到合成后的 Hermes sourcemap,并使用:
sentry-cli sourcemaps upload --debug-id-reference旧版 self-hosted Sentry 或旧版 @sentry/cli 不支持 Debug ID 时,可以显式指定 legacy release/dist:
npx pushy bundle --platform android --name "4.1" --sentry-release "[email protected]+10+pushy:4.1" --sentry-dist "pushy:4.1"这种 legacy 模式要求 App 运行时上报到 Sentry 的 release 和 dist 与上传参数完全一致。
配置文件
在 React Native 项目中创建 update.json:
{
"ios": {
"appId": "your-ios-app-id",
"appKey": "your-ios-app-key"
},
"android": {
"appId": "your-android-app-id",
"appKey": "your-android-app-key"
}
}注意事项
Provider 方法都会返回 CommandResult,消费 data 前需要检查 success。CLI 支持 ios、android 和 harmony 三个平台。
