# @exodus/feature-control 中文文档

规范地址：https://npmcn.com/package/%40exodus/feature-control/

版本：2\.5\.0
npm 元数据更新时间：2026-10-09T17:10:25.551Z
中文译文更新时间：2026-11-14T04:07:47.419Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40exodus/feature-control
原文对照：https://npmcn.com/package/%40exodus/feature-control/?lang=original
项目主页：https://github.com/ExodusMovement/exodus/tree/master/libs/libraries/feature-control
源码仓库：https://github.com/ExodusMovement/exodus

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

- 包体积（解压后）：22.2 kB，10 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- 运行依赖：3 个
- 首次发布：2021-12-13T13:47:34.977Z
- 最新版本发布：2026-10-09T17:10:25.345Z
- 近 30 天下载量：11129（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：17（近 12 个月 4 个）

## 中文简介

本库摘要并简化了特征旗帜和其他特征控件的处理和使用.

## 安装

```sh
npm install @exodus/feature-control
```

也可以使用：`pnpm add @exodus/feature-control`、`yarn add @exodus/feature-control`、`bun add @exodus/feature-control`

## README

# 特性控制

> 简化特性可用性处理

## 安装

```
$ npm install @exodus/feature-control
```

## 使用量

您可以在 [常见情况](https://npmcn.com/package/%40exodus/feature-control/#readme-common-scenarios)。 。 。 .

```js
import { createFeatureControl } from '@exodus/feature-control'

const unicornFeatureControl = createFeatureControl(
  {
    enabled: true,
    ready: true,
    versionSemver: '1.0.0',
    geolocation: {
      countryCode: 'US',
      regionCode: 'TX',
    },
  },
  {
    enabledOverride: true,
    geolocation: true,
    shutdownSemver: true,
  }
)

unicornFeatureControl.getIsOn() //=> true
unicornFeatureControl.getIsOn({ enabled: false }) //=> false
unicornFeatureControl.getIsOn({ shutdownSemver: '1.x' }) //=> false
unicornFeatureControl.getIsOn({ shutdownSemver: '0.x' }) //=> true
unicornFeatureControl.getIsOn({ shutdownSemver: '1.x', enabled: true }) //=> false
unicornFeatureControl.getIsOn({ geolocation: { countries: 'all' } }) //=> true
unicornFeatureControl.getIsOn({
  geolocation: { countries: 'all', disabledCountries: { US: 'United States of America' } },
}) //=> false
unicornFeatureControl.getIsOn({ geolocation: { countries: { US: 'United States of America' } } }) //=> true
unicornFeatureControl.getIsOn({
  geolocation: { countries: 'all', disabledRegions: { US: { TX: 'Texas' } } },
}) //=> false

unicornFeatureControl.getUnavailableStatus({ error: 'Unicorn is disabled!', enabled: true }) //=> 'Unicorn is disabled!'
unicornFeatureControl.getUnavailableStatus({
  unavailableStatus: 'Unicorn is disabled!',
  enabled: false,
}) //=> 'Unicorn is disabled!'
```

此选项也可以用于选择器 :

```js
import { useSelector } from 'react-redux'
import createFeatureControlSelectors from '@exodus/feature-control'

const unicornFeatureControl = createFeatureControlSelectors(
  {
    optsSelector: () => ({
      enabled: true,
      ready: true,
      versionSemver: '1.0.0',
      geolocation: {
        countryCode: 'US',
        regionCode: 'TX',
      },
    }),
    featureConfigSelector: (state) => state?.remoteConfig?.dapps?.unicorn,
  },
  {
    enabledOverride: true,
    geolocation: true,
    shutdownSemver: true,
  }
)

const Unicorn = () => {
  const isOn = useSelector(unicornFeatureControl.isOnSelector)
  const unAvailableStatus = useSelector(unicornFeatureControl.unavailableStatusSelector)

  return (
    <>
      <div>Unicorn is {isOn ? 'enabled' : 'disabled'}</div>
      {!isOn && <div>{unAvailableStatus}</div>}
    </>
  )
}

export default Unicorn
```

## API 密码

### 创建 Feature Control( 选项, 启用的Modules ?)

创建和 [配置](https://npmcn.com/package/%40exodus/feature-control/#readme-options) 特性控制实例。 返回一个实例,其方法如下:

#### .getIsOn( 特性配置)

回返a `boolean` 用于该特性是否可用.

#### .Get Uncessable status( 特性配置)

返回无法使用特性时要显示的状态 。 即使具备该特性,也可以在场.

##### 特性配置

类型 : `object`

配置已启用 [模块](https://npmcn.com/package/%40exodus/feature-control/#readme-enabledmodules)。 。 。 .

###### 启用

类型 : `boolean`

覆盖默认值 `enabled` 选项.

###### 地理位置

类型 : `object`

启用或禁用某些法域的特性 。 期望对象的签名如下:

```js
{
  countries: object<string, string> | string
  disabledCountries: object<string, string>
  disabledRegions: object<string, object<string, string>>
  enabledRegions: object<string, object<string, string>>
}
```

通过设置为某些国家启用特性 `countries` 以国家代码作为键,以国家名称作为值。 准备吧 `all` 为所有国家提供这种服务.

黑名单规则优先于白名单规则. 如果某一国家或区域被列入 `disabledCountries` 或者说 `disabledRegions`,该特性将被禁用,即使它被允许 `countries` 或者说 `enabledRegions`。 。 。 .

要禁用某些国家的特性, 设置 `disabledCountries` 以国家代码作为键,以国家名称作为值.

举个例子.

```js
const disabledCountries = {
  US: 'United States of America',
}
```

要禁用某些地区的特性, 设置 `disabledRegions` 以区域代码为键,区域名称为值.

举个例子.

```js
const disabledRegions = {
  US: {
    TX: 'Texas',
  },
}
```

仅允许在允许的国家内的某些地区使用该功能,设置 `enabledRegions` 以区域代码为键,区域名称为值.

举个例子.

```js
const enabledRegions = {
  US: {
    TX: 'Texas',
  },
  EE: {
    37: 'Harjumaa',
  },
}
```

###### 推出

类型 : `number`

整数从 `0` 改为 `100`。该功能仅在 `rolloutBucket` 选项小于 `rollout`。其他任何值都会禁用该特性.

###### 关闭Semver

类型 : `string`

特性被禁用的 SemVer 范围 .

###### 无可用状态

类型 : `string`

运行时返回状态 `.getUnavailableStatus(featureConfig)`。 。 。 .

#### 选项

类型 : `object`

##### 启用

类型 : `boolean`  
默认 : `true`

切换特性可用性 。 呼叫时可以被覆盖 `.getIsOn(featureConfig)` 财务报告和审定财务报表 `.getUnavailableStatus(featureConfig)`。 。 。 .

##### 准备

类型 : `boolean`  
默认 : `false`

切换特性准备 。 如果设置为 `false`, (中文(简体) ), `.getIsOn(featureConfig)` 永远回来 `false`. 主要用于开发,当该特性尚未准备好装运时.

##### 版本Semver

类型 : `string`

SemVer版本的应用程序. 可与 `shutdownSemver` 以禁用某些版本的特性.

##### 地理位置

类型 : `object<string, string>`

在某些法域允许或使申请失效时使用地理位置。 期望对象的签名如下:

```js
{
  countryName: string
  countryCode: string
  regionName: string
  regionCode: string
}
```

##### 推出按钮

类型 : `number`

整数从 `0` 改为 `99` 这对每个用户和功能都是稳定的。 使用过的 `rollout` 以便他们逐渐展开。 如果未设定,则该功能将关闭,除非 `rollout` 实值 `100`。 。 。 .

#### 启用 Modules 吗 ?

类型 : `object<string, boolean>`

指定要使用的模块。 可用模块按优先顺序排序,其中特性决定其可用性:

-   `enabledOverride`
-   `rollout`
-   `geolocation`
-   `shutdownSemver`

### 创建 Feature Control 选择器( 选项, 启用Modules)

创建和 [配置](https://npmcn.com/package/%40exodus/feature-control/#readme-options) 特性控制实例。 返回一个实例,其方法如下:

#### .is 选择器(状态)

回返a `boolean` 用于该特性是否可用.

#### 无法使用状态选择器( 状态)

返回无法使用特性时要显示的状态 。 即使具备该特性,也可以在场.

#### 选项

类型 : `object`

##### 选择选择器

类型 : `function`

设定 [选项](https://npmcn.com/package/%40exodus/feature-control/#readme-options) 在特性控制实例。 需要选择者 `function` 这需要一个 `state` 返回 a [选项](https://npmcn.com/package/%40exodus/feature-control/#readme-options) 对象.

##### 功能配置选择器

类型 : `function`

设定 [特性配置](https://npmcn.com/package/%40exodus/feature-control/#readme-featureconfig) 在特性控制实例。 需要选择者 `function` 这需要一个 `state` 返回 a [特性配置](https://npmcn.com/package/%40exodus/feature-control/#readme-featureconfig) 对象.

#### 启用 Modules 吗 ?

见 [这个](https://npmcn.com/package/%40exodus/feature-control/#readme-enabledmodules)。 。 。 .

## 共同的设想

### 我在开发一个不起作用的新功能 使用错误可能会失去资金

以下的用法可以使用,而不会影响生产环境中的用户和QA环境,假设旗子设定为 `false` 这些环境.

```js
createFeatureControl({
  enabled: true,
  ready: process.env.NEW_FEATURE_ENABLED,
})
```

### 我开发了一个新的功能 它不起作用, 但不会冒险 失去资金或打破应用程序

下面的用法可以在不影响到生产环境中的用户的情况下使用. 这使得QA和团队内的其他用户可以测试功能并跟踪最新进展.

```js
createFeatureControl({
  enabled: true,
  ready: isDev || isGenesis || isEden,
})
```

### 我开发了一个新的功能 正在工作,但还没有准备好生产

下面的用法可以在不影响到生产环境中的用户的情况下使用. 这使得QA和团队内的其他用户可以在给出最终反馈之前测试该功能.

```js
createFeatureControl({
  enabled: true,
  ready: isDev || isGenesis || isEden,
})
```

### 我开发了一个新的功能 已经可以生产了 并且预计接下来会发售

下面的用法将默认地提供该功能.

```js
createFeatureControl({
  enabled: true,
  ready: true,
})
```

### 我开发了一个新的功能,可以生产,预计下次发布时会发货. 但不能在某个日期之前启用

该特性可以在预期日期通过使用远程配置覆盖来切换 `enabled`。一旦该日期通过,我们可以切换 `enabled` 返回到 `true` 在客户端代码.

```js
createFeatureControl({
  enabled: false,
  ready: true,
})
```

### 我有一个工作功能 被运去生产, 但有些东西被打破了 因为块链叉了

通过设置关闭特性 `enabled` 改为 `false` 带有远程配置覆盖.

```js
createFeatureControl({
  enabled: false,
  ready: true,
})
```

您也可以使用 `shutdownSemver` 目标受影响的版本.

```js
const featureControl = createFeatureControl({
  enabled: true,
  ready: true,
  versionSemver: '1.0.0',
})

featureControl.getIsOn({ shutdownSemver: '1.x' })
//=> false
```

## 发展

```
bun install
bun test
```

## 常见问题

### @exodus/feature-control 是什么？

本库摘要并简化了特征旗帜和其他特征控件的处理和使用\.

### 如何安装 @exodus/feature-control？

在项目目录运行 npm install @exodus/feature-control，或使用 pnpm add / yarn add / bun add。

### @exodus/feature-control 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/exodus\_\_feature-control 是否存在。

### @exodus/feature-control 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @exodus/feature-control 可以商用吗？

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

### @exodus/feature-control 的下载量有多少？

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

### @exodus/feature-control 还在维护吗？

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

