@exodus/feature-control

中文文档
2.5.0发布于 2026/10/10MITES Module近 30 天下载 1.1万

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

中文使用文档
文档目录13 节
  1. 安装
  2. 使用量
  3. API 密码
  4. 创建 Feature Control( 选项, 启用的Modules ?)
  5. 创建 Feature Control 选择器( 选项, 启用Modules)
  6. 共同的设想
  7. 我在开发一个不起作用的新功能 使用错误可能会失去资金
  8. 我开发了一个新的功能 它不起作用, 但不会冒险 失去资金或打破应用程序
  9. 我开发了一个新的功能 正在工作,但还没有准备好生产
  10. 我开发了一个新的功能 已经可以生产了 并且预计接下来会发售
  11. 我开发了一个新的功能,可以生产,预计下次发布时会发货. 但不能在某个日期之前启用
  12. 我有一个工作功能 被运去生产, 但有些东西被打破了 因为块链叉了
  13. 发展

特性控制

简化特性可用性处理

安装

$ npm install @exodus/feature-control

使用量

您可以在 常见情况。 。 。 .

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!'

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

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 ?)

创建和 配置 特性控制实例。 返回一个实例,其方法如下:

.getIsOn( 特性配置)

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

.Get Uncessable status( 特性配置)

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

特性配置

类型 : object

配置已启用 模块。 。 。 .

启用

类型 : boolean

覆盖默认值 enabled 选项.

地理位置

类型 : object

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

{
  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 以国家代码作为键,以国家名称作为值.

举个例子.

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

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

举个例子.

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

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

举个例子.

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>

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

{
  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)

创建和 配置 特性控制实例。 返回一个实例,其方法如下:

.is 选择器(状态)

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

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

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

选项

类型 : object

选择选择器

类型 : function

设定 选项 在特性控制实例。 需要选择者 function 这需要一个 state 返回 a 选项 对象.

功能配置选择器

类型 : function

设定 特性配置 在特性控制实例。 需要选择者 function 这需要一个 state 返回 a 特性配置 对象.

启用 Modules 吗 ?

见 这个。 。 。 .

共同的设想

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

发展

bun install
bun test

版本与发布记录

@exodus/feature-control 共发布 17 个版本,首次发布于 2021/12/13;过去 12 个月发布了 4 个版本。

版本发布日期距今
2.5.0latest2026/10/101 个月前
2.4.12026/05/056 个月前
2.4.02025/12/2910 个月前
2.3.02025/12/2310 个月前
2.2.42025/05/131.5 年前
2.2.32025/02/171.7 年前

关于 @exodus/feature-control 的常见问题

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