# @bravemobile/react-native-code-push 中文文档

规范地址：https://npmcn.com/package/%40bravemobile/react-native-code-push/

版本：13\.6\.0
npm 元数据更新时间：2026-10-22T09:10:13.378Z
中文译文更新时间：2026-11-08T14:16:54.119Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bravemobile/react-native-code-push
原文对照：https://npmcn.com/package/%40bravemobile/react-native-code-push/?lang=original
项目主页：https://microsoft.github.io/code-push
源码仓库：https://github.com/Soomgo-Mobile/react-native-code-push

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：2.9 MB，261 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18
- 运行依赖：7 个
- peer 依赖：tsx \>=4，expo \>=50\.0\.0，ts-node \>=10，react-native \*
- 首次发布：2024-03-21T07:57:37.297Z
- 最新版本发布：2026-10-22T09:10:10.408Z
- 近 30 天下载量：18751（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：69（近 12 个月 22 个）

## 中文简介

CodePush 服务的原生插件

## 安装

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

也可以使用：`pnpm add @bravemobile/react-native-code-push`、`yarn add @bravemobile/react-native-code-push`、`bun add @bravemobile/react-native-code-push`

## README

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

### 没有更新服务器的代码Push

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

### 新架构支持

支持回放土著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`首先替换国家防范机制一揽子计划.

```bash
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\. 安装国家预防机制一揽子计划

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

### 2\. 运行内置命令

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

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

```bash
npx code-push init
```

要导出嵌入的 JS 捆绑 [diff 更新发布](https://npmcn.com/package/%40bravemobile/react-native-code-push/docs/diff-updates.md),使用时 `npx code-push init --diff-updates`。 。 。 .

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

```bash
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`(中文(简体) )

```diff
+  #import <CodePush/CodePush.h>
```

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

```diff
  @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`**

```diff
+ #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`**

```diff
+ 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`**

```diff
+ 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`**

```diff
  // ...
+ 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 配置 :**

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

**运行预建应用更改 :**

```bash
npx expo prebuild
```

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

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

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

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

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

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

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

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

```typescript
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` 使用可选择的回调来报告更新时所做的 下载,无论是运行还是被翻回,以及它来自哪个档案. 他们是 纯为观察.

见 [遥测回调](https://npmcn.com/package/%40bravemobile/react-native-code-push/docs/telemetry-callbacks.md) 每个人的所得 和如何 登记他们.

### 5\. 配置CLI工具

> \[TIP\] 比较详细和实用的例子是: `CodePushDemoApp` 内 `example` 目录 。 ([链接](https://github.com/Soomgo-Mobile/react-native-code-push/tree/master/Examples/CodePushDemoApp)(中文(简体) )

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

然后,执行三个功能上传捆绑文件并创建/更新发布历史, 加上一个可选的第四 `bundleDownloader` - 如果你发表 [资产 diff 档案](https://npmcn.com/package/%40bravemobile/react-native-code-push/docs/diff-updates.md#asset-diff-archives)。 。 。 . CLI工具使用这些功能发布CodePush更新并管理发布. (这些功能不是由库运行时使用. )

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

```typescript
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`,无需进一步设置:

```bash
npm install --save-dev tsx
```

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

```diff
  {
    "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 更新](https://npmcn.com/package/%40bravemobile/react-native-code-push/docs/diff-updates.md) 钩子 每个二进制版本要保存什么 客户端如何选择存档 .

## 使用 CLI 工具

> \[TIP\] 你用得着 `--help` 命令以查看可用的命令和选项.
> 
> 详细文件见 [CLI 读取](https://npmcn.com/package/%40bravemobile/react-native-code-push/cli/README.md) (单位:千美元)[한국어](https://npmcn.com/package/%40bravemobile/react-native-code-push/cli/README.ko.md)) (中文(简体) ).

(尚未支持交互模式)

### 图标

#### `create-history`

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

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

**示例**

-   为二进制应用程序版本创建新发布历史 `1.0.0`。 。 。 .

```bash
npx code-push create-history --binary-version 1.0.0 --platform ios --identifier staging
```

#### `show-history`

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

**示例**

-   显示二进制应用程序版本的发布历史 `1.0.0`。 。 。 .

```bash
npx code-push show-history --binary-version 1.0.0 --platform ios --identifier staging
```

#### `release`

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

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

**示例**

-   发布代码Push更新 `1.0.1` 瞄准二进制应用程序版本 `1.0.0`。 。 。 .

```bash
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`) (中文(简体) ).

```bash
npx code-push update-history --binary-version 1.0.0 --app-version 1.0.1 \
                             --platform ios --identifier staging \
                             --enable false
```

#### `bundle`

创建 CodePush 捆绑文件 .

**示例**

```bash
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 是什么？

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 和提交记录判断。

