@bravemobile/react-native-code-push

中文文档
13.6.0发布于 2026/10/22MITTypeScriptCommonJS构建来源已验证近 30 天下载 1.9万

CodePush 服务的原生插件

中文使用文档
文档目录16 节
  1. 没有更新服务器的代码Push
  2. 新架构支持
  3. 所需经费
  4. 移徙指南
  5. * 安装
  6. 1. 安装国家预防机制一揽子计划
  7. 2. 运行内置命令
  8. 2-1. 人工设置
  9. iOS 手册设置
  10. Android 手动设置
  11. 3. 展览设置
  12. 4. "代码Push-fy" 您的应用程序
  13. 5. 配置CLI工具
  14. 6. Diff更新(可选)
  15. 使用 CLI 工具
  16. 图标

@bravemobile/ react-native-code-push (英语)

没有更新服务器的代码Push

  • 没有需要 API 服务器 – 使用静态托管解决方案(如AWS S3)而无需维护额外的API服务器.
  • 熟悉的 API - 盖上 microsoft/react-native-code-push,随着本地模块迁移到涡轮摩多尔.
  • 灵活部署 – 执行自己的发布工作流程,让您完全控制部署过程.
  • Diff 更新 - 出版 二进制补丁和资产 diff 发布 所以一个客户端下载了与它已经持有的区别,而不是整个捆绑.

新架构支持

支持回放土著0.77~0.86.

[注] 如果您正在使用 React 原住民 0. 76 或 更低, 请使用版本 12.0.2 这个图书馆.

[大 13.0.0 将本地模块迁移到 TurboModule 。 A 类 13.0.0 二进制只运行 OTA 捆绑 13.0.0 或以后,所以在升级时,将一个新的二进制版本装入并开始其释放历史新鲜.

(测试了反应原生CLI模板应用)

所需经费

  • 原生反应: 0.77或以上
  • iOS系统: 15.5以上
  • 机器人: API 16级或以上

移徙指南

如果您已经使用 react-native-code-push首先替换国家防范机制一揽子计划.

npm remove react-native-code-push
npm install @bravemobile/react-native-code-push
  1. 编辑 android/app/build.gradle 要删除的文件 apply from: "../../node_modules/..../codepush.gradle" 线条.

  2. 下列改动是可选的,但建议清理旧配置:

    • 由于部署密钥不再使用,建议从您手中移除 Info.plist, (中文(简体) ), strings.xml,或JavaScript代码.
    • 由于自动链接,您可以删除 react-native-code-push 模块设置 settings.gradle。 。 。 .
  3. 遵循安装指南从 '4. "代码Push -fy"你的应用程序。 。 。 .

* 安装

1. 安装国家预防机制一揽子计划

npm install @bravemobile/react-native-code-push

2. 运行内置命令

对于回放原生的 CLI 项目,您可以使用自动设置命令来配置您的项目用于 CodePush .

此命令将自动编辑您的 AppDelegate 财务报告和审定财务报表 MainApplication 用于整合 CodePush 的文件.

npx code-push init

要导出嵌入的 JS 捆绑 diff 更新发布,使用时 npx code-push init --diff-updates。 。 。 .

运行以下命令以安装 iOS 的 CocoaPods 依赖性 :

cd ios && pod install && cd ..

(或 npx pod-install, (中文(简体) ), bundle exec pod install --project-directory=./ios,) (中文(简体) )

2-1. 人工设置

如果您更喜欢手动设置,或者自动配置失败,可以在下面遵循手动设置指令.

点击可查看手动设置指令 .

iOS 手册设置

(1) 安装可可属地

运行 cd ios && pod install && cd ..

(单位:千美元)npx pod-install, (中文(简体) ), bundle exec pod install --project-directory=./ios,) (中文(简体) )

Cock 编译从 C 来源安装 二进制补丁更新的应用程序 携带,所以没有别的东西可以安装: 可可花与其余的一起建造 在舱.

(2) 编辑 AppDelegate 代码

如果你有的话 AppDelegate.swift (

如果您的项目没有桥接头, 请创建文件 .

  1. 用 Xcode 打开您的项目( 例如 CodePush DemoApp. xcworkspace)
  2. 文件 ~ 新建 ~ 从模板取出文件
  3. 选择“ Objective-C 文件” 并点击“ Next” 并任意写入名称 .
  4. 然后,Xcode会要求您创建一个连接头文件. 点击“ 创造 ” .
  5. 删除第3步中创建的文件 .

将以下行添加到连接头文件 。 (例如:. CodePushDemoApp-Bridging-Header.h(中文(简体) )

+  #import <CodePush/CodePush.h>

然后编辑 AppDelegate.swift 就像下面一样.

  @main
  class AppDelegate: RCTAppDelegate {
    override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
  
    // ...
  
    override func bundleURL() -> URL? {
  #if DEBUG
      RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index")
  #else
-     Bundle.main.url(forResource: "main", withExtension: "jsbundle")
+     CodePush.bundleURL()
  #endif
    }
  }

或者,如果你已经 AppDelegate.mm

+ #import <CodePush/CodePush.h>
  
  // ...
  
  - (NSURL *)bundleURL
  {
  #if DEBUG
    return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
  #else
-   return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+   return [CodePush bundleURL];
  #endif
  }
  
  @end

Android 手动设置

编辑 MainApplication 代码

(RN 0.82+) (韩语). 如果你有的话 MainApplication.kt

+ import com.microsoft.codepush.react.CodePush

  class MainApplication : Application(), ReactApplication {
    override val reactHost: ReactHost by lazy {
      getDefaultReactHost(
        context = applicationContext,
        packageList =
          PackageList(this).packages.apply {
            // Packages that cannot be autolinked yet can be added manually here, for example:
            // add(MyReactNativePackage())
          },
+       jsBundleFilePath = CodePush.getJSBundleFile(),
      )
    }
  // ...
}

(RN 0.73+) (韩语). 如果你有的话 MainApplication.kt

+ import com.microsoft.codepush.react.CodePush

  class MainApplication : Application(), ReactApplication {
    override val reactNativeHost: ReactNativeHost =
      object : DefaultReactNativeHost(this) {

        // ...

+       override fun getJSBundleFile(): String = CodePush.getJSBundleFile()
      }
    // ...
  }

或者,如果你已经 MainApplication.java

  // ...
+ import com.microsoft.codepush.react.CodePush

  public class MainApplication extends Application implements ReactApplication {

    private final ReactNativeHost mReactNativeHost =
        new DefaultReactNativeHost(this) {

          // ...
  
+         @Override
+         override fun getJSBundleFile(): String {
+           return CodePush.getJSBundleFile()
+         }
        };
    // ...
  }

3. 展览设置

对于Expo项目,可以使用自动配置插件来代替手动设置.

将插件添加到您的 Expo 配置 :

// app.config.js
export default {
  expo: {
    plugins: ["@bravemobile/react-native-code-push"],
  },
};

运行预建应用更改 :

npx expo prebuild

要导出嵌入的 JS 捆绑 diff 更新发布,将代码Push插件条目替换为 ["@bravemobile/react-native-code-push", { "diffUpdates": true }]。该选项默认已禁用.

[注] 该插件自动处理所有本土iOS和Android代码修改. 不需要手动编辑 AppDelegate, MainApplication, 或 gradle 文件.

所需资源 曝光 SDK: 50.0.0或以上

4. "代码Push-fy" 您的应用程序

您的应用软件的根组件应该用更高级的组件包裹.

您还应通过配置选项,包括执行 releaseHistoryFetcher 函数. 此函数用于在 ReleaseHistoryInterface 数据.

要启用此功能, 您需要使用 CLI 工具创建发布历史并上传到远程 . (以下步骤更能解释CLI

在运行时,库会获取这些信息来保持应用程序的更新.

import CodePush, {
  ReleaseHistoryInterface,
  UpdateCheckRequest,
} from "@bravemobile/react-native-code-push";

// ... MyApp Component

async function releaseHistoryFetcher(
  updateRequest: UpdateCheckRequest,
): Promise<ReleaseHistoryInterface> {

  // Fetch release history for current binary app version.
  // You can implement how to fetch the release history freely. (Refer to the example app if you need a guide)

  const {data: releaseHistory} = await axios.get<ReleaseHistoryInterface>(
    `https://your.cdn.com/histories/${platform}/${identifier}/${updateRequest.app_version}.json`,
  );
  return releaseHistory;
}

export default CodePush({
  checkFrequency: CodePush.CheckFrequency.MANUAL, // or something else
  releaseHistoryFetcher: releaseHistoryFetcher,
})(MyApp);

[注] 获取发布历史的 URL 应当指向 CLI 工具生成的资源位置 .

4-1. 遥测回调

CodePushOptions 使用可选择的回调来报告更新时所做的 下载,无论是运行还是被翻回,以及它来自哪个档案. 他们是 纯为观察.

见 遥测回调 每个人的所得 和如何 登记他们.

5. 配置CLI工具

[TIP] 比较详细和实用的例子是: CodePushDemoApp 内 example 目录 。 (链接(中文(简体) )

(1) 创建一个 code-push.config.ts 在您的工程根目录中的文件.

然后,执行三个功能上传捆绑文件并创建/更新发布历史, 加上一个可选的第四 bundleDownloader - 如果你发表 资产 diff 档案。 。 。 . CLI工具使用这些功能发布CodePush更新并管理发布. (这些功能不是由库运行时使用. )

您可以复制并粘贴以下代码,并根据需要修改.

import {
  CliConfigInterface,
  ReleaseHistoryInterface,
} from "@bravemobile/react-native-code-push";

const Config: CliConfigInterface = {
  bundleUploader: async (
    source: string,
    platform: "ios" | "android",
    identifier,
    artifact,
  ): Promise<{downloadUrl: string}> => {
    // ...
  },

  getReleaseHistory: async (
    targetBinaryVersion: string,
    platform: "ios" | "android",
    identifier,
  ): Promise<ReleaseHistoryInterface> => {
    // ...
  },

  setReleaseHistory: async (
    targetBinaryVersion: string,
    jsonFilePath: string,
    releaseInfo: ReleaseHistoryInterface,
    platform: "ios" | "android",
    identifier,
  ): Promise<void> => {
    // ...
  },

  // Only needed to publish asset diff archives (see "4-2. Asset Diff Archives").
  // bundleDownloader: async (
  //   archive,
  //   platform: "ios" | "android",
  //   identifier,
  // ): Promise<{downloadedFilePath: string}> => {
  //   // ...
  // },
};

module.exports = Config;

bundleUploader

  • 执行上传捆绑文件的功能.
  • 可选 artifact 参数识别完整捆绑、 二进制补丁或资产 diff 存档 。 这个 release 命令总是提供,包括目标二进制版本和 用于构建存储密钥而无需解析文件名的软件包散列 .
  • 这个 downloadUrl 返回此函数的记录 ReleaseHistoryInterface 数据 并被库运行时间从此 URL 下载捆绑文件 .
  • 用于下列情况:
    • 创建新的代码Push 更新 release 命令.

getReleaseHistory

  • 通过获取JSON文件或调用API来获取特定二进制应用程序的发布历史.
  • 用于下列情况:
    • 用 . 打印发行历史 show-history 命令.
    • 装入当前发布历史 release 命令.
    • 获取发布历史以修改其中的信息 update-history 命令.

(类似于 releaseHistoryFetcher 函数在库运行时选项中。 )

setReleaseHistory

  • 上传位于 jsonFilePath 或使用 releaseInfo 元数据.
  • 如果使用 JSON 文件, 应允许修改现有文件. (建议填写文件。 )
  • 用于下列情况:
    • 为新二进制构建创建新发行记录 create-history 命令.
    • 将新记录添加到已有的发行历史中 release 命令.
    • 使用 update-history 命令.

(2) A类 code-push.config.ts (TypeScript)文件需要安装加载器.

安装 tsx,无需进一步设置:

npm install --save-dev tsx

ts-node 也继续工作,用于 tsx 未安装。 请注意: ts-node 没有 更长久地维持,所以支持 已贬值,今后将取消 版本 - 请迁移到 tsx在此之前, ts-node 需要满足以下条件: tsconfig.json 设置 :

  {
    "extends": "@react-native/typescript-config/tsconfig.json",
    // ...
    "include": [
      // ...
+     "code-push.config.ts"
    ],
+   "ts-node": {
+     "compilerOptions": {
+       "module": "CommonJS",
+       "types": ["node"]
+     }
+   }
  }

A 类 code-push.config.js (JavaScript)文件不需要.

6. Diff更新(可选)

取代完整的档案,释放可以提供对照联署材料计算的二进制补丁 装入应用程序二进制 搭载个人的释放也可以搭载资产 diff, for a 客户端运行一个最近更新的发布被忽略 。 两人都需要一个建筑 复制你商店里JS捆绑的钩子 bundleDownloader 内 code-push.config.ts。 。 。 .

见 Diff 更新 钩子 每个二进制版本要保存什么 客户端如何选择存档 .

使用 CLI 工具

[TIP] 你用得着 --help 命令以查看可用的命令和选项.

详细文件见 CLI 读取 (单位:千美元)한국어) (中文(简体) ).

(尚未支持交互模式)

图标

create-history

为特定的二进制应用版本创建新的发布历史.

  • 当您向应用程序商店发布新的二进制应用程序时使用此命令 . 这确保了库运行时间将二进制应用程序确认为最新版本,并确定没有为它提供代码Push更新.

示例

  • 为二进制应用程序版本创建新发布历史 1.0.0。 。 。 .
npx code-push create-history --binary-version 1.0.0 --platform ios --identifier staging

show-history

显示特定二进制应用程序版本的发布历史 .

示例

  • 显示二进制应用程序版本的发布历史 1.0.0。 。 。 .
npx code-push show-history --binary-version 1.0.0 --platform ios --identifier staging

release

为特定二进制应用版本发布代码Push更新.

  • 这个命令创建了 CodePush 捆绑文件,上传它,并用新的发行信息更新发行历史.

示例

  • 发布代码Push更新 1.0.1 瞄准二进制应用程序版本 1.0.0。 。 。 .
npx code-push release --binary-version 1.0.0 --app-version 1.0.1 \
                      --platform ios --identifier staging --entry-file index.js \
                      --mandatory true

# Expo project
npx code-push release --framework expo --binary-version 1.0.0 --app-version 1.0.1 --platform ios
  • --framework(单位:千美元)-f: 框架类型(expo)
  • --binary-version:代码Push更新针对的二进制app版本.
  • --app-version:代码Push的版本自我更新.

[大 --app-version 应大于 --binary-version (中文(简体) ).

  • --rollout:更新的推出百分比。 (0~100,包含)
  • --minimum-background-duration: 应用程序在恢复应用此更新之前, 必须在背景中显示秒数 ON_NEXT_RESUME 财务报告和审定财务报表 ON_NEXT_SUSPEND 仅安装。 (整秒,0秒或更长)
    • 释放时设定的值优先于 minimumBackgroundDuration 转至 sync,以及 0 应用下一次恢复的更新.

update-history

更新特定代码Push更新的发布历史 .

  • 使用 --enable 选项,以禁用特定放出以回滚。 (或使之得以)
  • 使用 --mandatory 选项,使更新成为强制性或可选性.
  • 使用 --rollout 选项更改更新的推出百分比。 (0~100,包含)
    • 如果推出百分比降低,超出新目标的用户将取消推出,并回滚至上一个最新版本.
  • 使用 --minimum-background-duration 选项以更改应用程序在恢复时应用更新前必须在背景中有多少秒 ON_NEXT_RESUME 财务报告和审定财务报表 ON_NEXT_SUSPEND 仅安装。 (整秒,0秒或更长)
    • 释放后可以降低 设定为 0例如,在下一次恢复时应用更新,而不是等待.

示例

  • 回滚代码Push更新 1.0.1 (目标二进制应用程序版本) 1.0.0) (中文(简体) ).
npx code-push update-history --binary-version 1.0.0 --app-version 1.0.1 \
                             --platform ios --identifier staging \
                             --enable false

bundle

创建 CodePush 捆绑文件 .

示例

npx code-push bundle --platform android --entry-file index.js

# Expo project
npx code-push bundle --framework expo --platform android --entry-file index.js
  • --framework(单位:千美元)-f: 框架类型(expo)

默认情况下,捆绑文件在 /build/bundleOutput 目录.

[注] 对于博览会项目,CLI使用 expo export:embed 命令,用于捆绑而不是React Industrial的捆绑命令.

(文件名代表捆绑内容的散列值

版本与发布记录

@bravemobile/react-native-code-push 共发布 69 个版本,首次发布于 2024/03/21;过去 12 个月发布了 22 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
13.6.0latest2026/10/2217 天前
13.5.02026/10/1524 天前
13.4.02026/10/1227 天前
13.3.22026/10/011 个月前
13.3.12026/09/171 个月前
13.3.02026/09/171 个月前

其他发布通道:beta → 13.1.0-beta.6。

关于 @bravemobile/react-native-code-push 的常见问题

@bravemobile/react-native-code-push 是什么?

CodePush 服务的原生插件

如何安装 @bravemobile/react-native-code-push?

在项目目录运行 npm install @bravemobile/react-native-code-push,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react-native(*)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 code-push,可以用 npx code-push 直接运行。

@bravemobile/react-native-code-push 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bravemobile/react-native-code-push 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@bravemobile/react-native-code-push 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bravemobile/react-native-code-push 可以商用吗?

@bravemobile/react-native-code-push 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@bravemobile/react-native-code-push 的下载量有多少?

根据 npm 官方下载统计,@bravemobile/react-native-code-push 在 2026/10/09 – 2026/11/07 这 30 天内被下载 18,751 次,日均约 625 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bravemobile/react-native-code-push 还在维护吗?

最新版本 13.6.0 发布于 2026/10/22(17 天前);至今共发布 69 个版本,其中过去 12 个月发布了 22 个;首次发布于 2024/03/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。