# @eppo/react-native-sdk 中文文档

规范地址：https://npmcn.com/package/%40eppo/react-native-sdk/

版本：3\.8\.0
npm 元数据更新时间：2026-03-16T18:30:15.716Z
中文译文更新时间：2026-11-13T19:55:03.339Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40eppo/react-native-sdk
原文对照：https://npmcn.com/package/%40eppo/react-native-sdk/?lang=original
项目主页：https://github.com/Eppo-exp/react-native-sdk#readme
源码仓库：https://github.com/Eppo-exp/react-native-sdk

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

- 包体积（解压后）：127 kB，74 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>= 18\.0\.0
- 运行依赖：3 个
- peer 依赖：react \*，react-native \*
- 首次发布：2023-04-11T08:10:58.938Z
- 最新版本发布：2025-04-03T01:31:09.473Z
- 近 30 天下载量：45835（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：29（近 12 个月 0 个）

## 中文简介

Eppo 反应原生 SDK

## 安装

```sh
npm install @eppo/react-native-sdk
```

也可以使用：`pnpm add @eppo/react-native-sdk`、`yarn add @eppo/react-native-sdk`、`bun add @eppo/react-native-sdk`

## README

# Eppo 反应原生 SDK

[![Test and lint SDK](https://github.com/Eppo-exp/react-native-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/Eppo-exp/react-native-sdk/actions/workflows/ci.yml)

[埃波](https://www.geteppo.com/) 是一个模块化的标注和实验分析工具。 Eppo的React Introduct SDK是为在网页浏览器中运行的单一用户客户端应用程序做出任务而构建的. 在继续之前,你需要一个Epo账户.

## 特征

-   特性门
-   杀死开关
-   逐步推出
-   A/B/n实验
-   相互排斥的实验(Layers)
-   动态配置

## 安装

```bash
npm install @eppo/react-native-sdk
```

## 快开始

开始初始化一个Eppo客户端的单通实例. 初始化后,客户端可以用于在您的应用程序中任意位置的任务.

#### 初始化一次

```javascript
import { init } from "@eppo/react-native-sdk";

await init({ apiKey: "<SDK-KEY-FROM-DASHBOARD>" });
```

#### 随地分配

```javascript
import * as EppoSdk from "@eppo/react-native-sdk";

const eppoClient = EppoSdk.getInstance();
const user = getCurrentUser();

const variation = eppoClient.getBooleanAssignment('show-new-feature', user.id, { 
  'country': user.country,
  'device': user.device,
}, false);
```

## 分配职能

每个Eppo旗都有回放类型,在仪表板上设定一次创建. 一旦创建了一面旗帜,代码中的指派应当使用相应的打入函数:

```javascript
getBoolAssignment(...)
getNumericAssignment(...)
getIntegerAssignment(...)
getStringAssignment(...)
getJSONAssignment(...)
```

每个函数都有相同的签名,但返回函数名中的类型。 用于布尔斯 `getBooleanAssignment`,其签名如下:

```javascript
getBooleanAssignment: (
  flagKey: string,
  subjectKey: string,
  subjectAttributes: Record<string, any>,
  defaultValue: boolean,
) => boolean
```

## 初始化选项

这个 `init` 函数接受以下可选配置参数.

| 选项 | 类型 | 说明 | 默认 |
| --- | --- | --- | --- |
| **`assignmentLogger`** | [指派](https://github.com/Eppo-exp/react-native-sdk-common/blob/75c2ea1d91101d579138d07d46fca4c6ea4aafaf/src/assignment-logger.ts#L55-L62) | 一个回调,将每个任务发送到你的数据仓库。 仅用于实验分析。 见 [实例](https://npmcn.com/package/%40eppo/react-native-sdk/#readme-assignment-logger) 见下文. | `null` |
| **`requestTimeoutMs`** | 编号 | 实验配置 HTTPS 请求的超时为毫秒. | `5000` |
| **`numInitialRequestRetries`** | 编号 | 数目 _额外_ 如果初始配置请求失败,则会尝试其时间。 这是通常同步等待的请求(通过 `await`供完成。 请求之间将进行一个小等. | `1` |
| **`pollAfterSuccessfulInitialization`** | 布尔 | 在成功请求初始配置后为新配置投放( 每30秒) . | `false` |
| **`pollAfterFailedInitialization`** | 布尔 | 即使初始配置请求失败, 仍要为新配置投放 . | `false` |
| **`throwOnFailedInitialization`** | 布尔 | 如果初始化时无法获取初始配置, 则丢出一个错误( 拒绝承诺 ) . | `true` |
| **`numPollRequestRetries`** | 编号 | 如果在初始化后对更新配置进行投票,在放弃之前将尝试请求次数。 随后的尝试使用指数回放进行. | `7` |

## 任务日志

要使用 Eppo SDK 进行需要进行分析的实验,请通过回调记录功能到 `init` 函数在 SDK 初始化上。 SDK在指定变异时引用回调来获取任务数据. 仓库需要分配数据进行分析.

以下代码说明了使用下列方式进行记录召回的实例: [部分](https://segment.com/)但你可以使用任何你想要的系统。 唯一的要求是SDK收到一个 `logAssignment` 调用函数 。 在这里,我们确定 Eppo 的实施 `IAssignmentLogger` 包含单个函数的界面 `logAssignment`数字 :

```javascript
import { IAssignmentLogger } from "@eppo/react-native-sdk";
import { AnalyticsBrowser } from "@segment/analytics-next";

// Connect to Segment (or your own event-tracking system)
const analytics = AnalyticsBrowser.load({ writeKey: "<SEGMENT_WRITE_KEY>" });

const assignmentLogger: IAssignmentLogger = {
  logAssignment(assignment) {
    analytics.track({
      userId: assignment.subject,
      event: "Eppo Randomized Assignment",
      type: "track",
      properties: { ...assignment },
    });
  },
};
```

#### 避免重复任务日志

Eppo的SDK使用内部缓存确保重复的任务事件不会被登录到数据仓库. 虽然Eppo的分析引擎将自动去除任务记录,但这种内部缓存可以防止发射不必要的事件并可以帮助将事件记录的相关成本降到最低.

## 哲学

Eppo的SDK是为简便,速度和可靠性而建造的. 旗帜配置被压缩并分布在全球CDN(快取)上,一般在15ms以下到达终端用户. 这些配置随后在当地缓存,以确保每项任务立即完成。 每个SDK都尽可能轻取,在周围有评价逻辑 [25条简单的代码线](https://github.com/Eppo-exp/react-native-sdk-common/blob/b903bbbca21ca75c0ab49d894951eb2f1fc6c85b/src/evaluator.ts#L34-L59),上面列出的简单打字功能是所有开发者需要知道的,抽象了基础一组特性的复杂性.

## 常见问题

### @eppo/react-native-sdk 是什么？

Eppo 反应原生 SDK

### 如何安装 @eppo/react-native-sdk？

在项目目录运行 npm install @eppo/react-native-sdk，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：react（\*）、react-native（\*）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @eppo/react-native-sdk 支持 TypeScript 吗？

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

### @eppo/react-native-sdk 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @eppo/react-native-sdk 需要什么版本的 Node\.js？

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

### @eppo/react-native-sdk 可以商用吗？

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

### @eppo/react-native-sdk 的下载量有多少？

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

### @eppo/react-native-sdk 还在维护吗？

最新版本 3\.8\.0 发布于 2025/04/03（1\.6 年前）；至今共发布 29 个版本，其中过去 12 个月发布了 0 个；首次发布于 2023/04/11。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

