# @expo/repack-app 中文文档

规范地址：https://npmcn.com/package/%40expo/repack-app/

版本：0\.10\.4
npm 元数据更新时间：2026-09-29T05:33:46.166Z
中文译文更新时间：2026-11-14T05:26:51.985Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40expo/repack-app
原文对照：https://npmcn.com/package/%40expo/repack-app/?lang=original

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

- 包体积（解压后）：25.6 MB，9 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：3 个
- 首次发布：2024-05-01T16:46:30.682Z
- 最新版本发布：2026-09-29T05:33:45.988Z
- 近 30 天下载量：640507（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：63（近 12 个月 24 个）

## 中文简介

Expo 应用程序的重新包装工具

## 安装

```sh
npm install @expo/repack-app
```

也可以使用：`pnpm add @expo/repack-app`、`yarn add @expo/repack-app`、`bun add @expo/repack-app`

## README

# @ expo/ 重新包装- app

Expo 应用程序的重新包装工具

## API 文档

### CLI 使用量

```sh
repack-app [options] [project-root]
```

#### 选项

-   `-p, --platform <platform>` (需要): 重新包装应用程序的平台`android` 或者说 `ios`(中文(简体) )
-   `--source-app <path>` (需要):源应用程序文件的路径(Android的APK/AAB,iOS的IPA)
-   `--android-build-tools-dir <path>`: Android 构建工具目录的路径
-   `-w, --working-directory <path>`: 工作目录的路径
-   `-o, --output <path>`: 输出文物的路径
-   `-v, --verbose`: 启用动词记录

#### Android 特定选项

-   `--ks <path>`: 键盘文件的路径
-   `--ks-pass <password>`: keystore 密码( 支持的格式 : `pass:<password>`, (中文(简体) ), `env:<name>`, (中文(简体) ), `file:<file>`(中文(简体) )
-   `--ks-key-alias <alias>`: keystore 密钥别名
-   `--ks-key-pass <password>`: keystore 密钥密码( 支持的格式 : `pass:<password>`, (中文(简体) ), `env:<name>`, (中文(简体) ), `file:<file>`(中文(简体) )

#### iOS 特定选项

-   `--signing-identity <identity>`: 代码签名身份( Fastlane 后端, 只有 macOS )
-   `--provisioning-profile <path>`: 提供配置文件的路径
-   `--certificate <path>`: 路径 a `.p12` 签名身份。 符号为 [符号](https://github.com/zhlynn/zsign) 而不是快跑道,通过 WASM 进行中——不需要 Xcode 或密钥链,所以它也在 Linux 上工作
-   `--key-password <password>`: 密码 `.p12` 签名身份

#### 套装选项

-   `--embed-bundle-assets`: 强制嵌入捆绑资产
-   `--bundle-assets-sourcemap-output <path>`: 在指定的路径生成源图( 使用 --embed- bundle- assets)

### 程序用途

```typescript
import { repackAppAndroidAsync, repackAppIosAsync } from '@expo/repack-app';

// For Android
await repackAppAndroidAsync({
  platform: 'android',
  projectRoot: '/path/to/project',
  sourceAppPath: '/path/to/source.apk',
  // Optional configurations
  workingDirectory: '/path/to/working/dir',
  outputPath: '/path/to/output.apk',
  verbose: true,
  androidSigningOptions: {
    keyStorePath: '/path/to/keystore.jks',
    keyStorePassword: 'pass:password', // or 'env:KEYSTORE_PASS' or 'file:/path/to/pass'
    keyAlias: 'alias',
    keyPassword: 'pass:key-password', // or 'env:KEY_PASS' or 'file:/path/to/key-pass'
  },
  androidBuildToolsDir: '/path/to/build-tools',
  exportEmbedOptions: {
    sourcemapOutput: '/path/to/sourcemap',
  },
  env: {
    // Additional environment variables
  },
});

// For iOS
await repackAppIosAsync({
  platform: 'ios',
  projectRoot: '/path/to/project',
  sourceAppPath: '/path/to/source.ipa',
  // Optional configurations
  workingDirectory: '/path/to/working/dir',
  outputPath: '/path/to/output.ipa',
  verbose: true,
  // Sign with fastlane and a macOS keychain identity (requires Xcode)
  iosSigningOptions: {
    signingIdentity: 'Apple Development: Name (Team ID)',
    provisioningProfile: '/path/to/profile.mobileprovision',
    keychainPath: '/path/to/keychain', // Optional
  },
  // ...or with zsign and a .p12, which needs no Xcode and runs on Linux:
  // iosSigningOptions: {
  //   backend: 'zsign',
  //   certificatePath: '/path/to/identity.p12',
  //   keyPassword: 'p12-password',
  //   provisioningProfile: '/path/to/profile.mobileprovision',
  // },
  exportEmbedOptions: {
    sourcemapOutput: '/path/to/sourcemap',
  },
  env: {
    // Additional environment variables
  },
});
```

### 配置选项

在方案使用API时,有下列选项:

#### 常见选项

-   `platform`:'android' QQ'ios' - 重新包装应用程序的平台
-   `projectRoot`: 字符串 - 项目根目录的路径
-   `sourceAppPath`: 字符串 - 预建应用文件的路径(APK/AAB/IPA)
-   `workingDirectory?`: 字符串 - 临时文件的工作目录
-   `outputPath?`: 字符串 - 输出应用文件的路径(默认为) `projectRoot/repacked.apk` 或者说 `projectRoot/repacked.ipa`(中文(简体) )
-   `verbose?`: boolean - 启用动词记录
-   `exportEmbedOptions?`: ExportEmbed 选项 - 嵌入JS捆绑的选项. 指定时, 重新包装将生成捆绑资产 .
-   `skipWorkingDirCleanup?`: boolean - 跳过工作目录清理
-   `env?`: 记录 < 字符串, 字符串 > -- 环境变量

#### Android 特定选项

-   `androidSigningOptions?`: Android 签名选项 - 签名 Android app的选项
    -   `keyStorePath`: 字符串 - 键盘文件的路径
    -   `keyStorePassword`: 字符串 - keystore 密码( 支持的格式 : `pass:<password>`, (中文(简体) ), `env:<name>`, (中文(简体) ), `file:<file>`(中文(简体) )
    -   `keyAlias?`: 字符串 - Keystore 密钥别名
    -   `keyPassword?`: 字符串 - Keystore 密钥密码( 支持的格式 : `pass:<password>`, (中文(简体) ), `env:<name>`, (中文(简体) ), `file:<file>`(中文(简体) )
-   `androidBuildToolsDir?`: 字符串 - Android SDK 构建工具目录的路径
-   何时 `sourceAppPath` 是一个 `.aab`,重新包装用途 `bundletool` 从 PATH 转换为通用APK 并仍然输出 APK.

#### iOS 特定选项

-   `iosSigningOptions?`: IosSigning Options - 签名iOS应用程序的选项. 受歧视的工会 `backend`数字 :
    
    **`backend: 'fastlane'`** 带快车道的标志 `resign` 动作和一个 macOS 键链身份,所以它需要 Xcode :
    
    -   `signingIdentity`: 字符串 - 代码签名身份
    -   `provisioningProfile`: 字符串 QQ 记录 < string, string > - 提供配置文件的路径
    -   `keychainPath?`: 字符串 - 密码符号的密钥链文件路径
    
    **`backend: 'zsign'`** 标志 [符号](https://github.com/zhlynn/zsign) 正在通过 [zsign -wasm (英语)](https://github.com/gabrieldonadel/zsign-wasm)。没有Xcode,键链,或外部二进制,因此它也用于Linux:
    
    -   `certificatePath`: 字符串 - 路径 `.p12` 签名身份,由Keychain Access导出或从苹果开发者门户网站下载。 它将私钥与证书链,包括iOS安装时需要的Apple WWDR中间体一起持有
    -   `keyPassword?`: 字符串 - 密码保护 `.p12`
    -   `provisioningProfile`: 字符串 QQ 记录 < string, string > - 提供配置文件的路径

## 环境变量

-   `ANDROID_SDK_ROOT`: Android SDK 根目录的路径(Android built需要)
-   `bundletool`: Android 所需的路径 `.aab` 投入
-   `UNSTABLE_REPACK_APP_ICON`: 设定为 `1` 或者说 `true` 启用实验应用程序图标重新包装

## 电视应用

App图标再包装支持Apple TV和Android TV. 重新包装从源头检测到一个 TV 应用程序 文物 - `UIDeviceFamily` 在 iOS 中 `Info.plist`中,和倾斜后发射装置条目 `AndroidManifest.xml` 因此,没有额外的设置选项。 当源程序是电视应用时, 重新包装也会在内部运行 `expo prebuild` 与 `EXPO_TV=1`。 。 。 .

重新包装不会生成电视图像 。 它会重用什么 `expo prebuild` 写入,所以图标来自 页:1 [`@react-native-tvos/config-tv`](https://github.com/react-native-tvos/config-tv) 插件选项 :

-   苹果电视: `appleTVImages`,这需要所有七个图像。 没有它,资产目录就没有 `.brandassets`,并重新包装保留源图标并记录警告.
-   安卓电视: `androidTVBanner` 财务报告和审定财务报表 `androidTVIcon`。 。 。 .

## 常见问题

### @expo/repack-app 是什么？

Expo 应用程序的重新包装工具

### 如何安装 @expo/repack-app？

在项目目录运行 npm install @expo/repack-app，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 repack-app，可以用 npx repack-app 直接运行。

### @expo/repack-app 支持 TypeScript 吗？

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

### @expo/repack-app 支持 ESM 还是 CommonJS？

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

### @expo/repack-app 可以商用吗？

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

### @expo/repack-app 的下载量有多少？

根据 npm 官方下载统计，@expo/repack-app 在 2026/10/14 – 2026/11/12 这 30 天内被下载 640,507 次，日均约 21,350 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @expo/repack-app 还在维护吗？

最新版本 0\.10\.4 发布于 2026/09/29（1 个月前）；至今共发布 63 个版本，其中过去 12 个月发布了 24 个；首次发布于 2024/05/02。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

