@exodus/feature-flags

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

基于远程Config、设备地理定位等的当前可用特性的监测/控制模块

中文使用文档
文档目录10 节
  1. 使用量
  2. 背景情况
  3. UI 边
  4. 逐步推出
  5. 不使用示例 @exodus/headless
  6. 构成部分
  7. 远程图形FeatureFlagAtoms
  8. 特性标记原子
  9. 特性标记原子
  10. 特性标记

@exodus/ feature-flags (英语)

用于监测/控制现有特性的模块和原子 remoteConfig,设备 geolocation等 (中文(简体) ). 另见 @ exodus/ feature- control。 。 。 .

使用量

我们建议您通过 @exodus/headless,如下实例所示:

  1. 配置时指定您的特性旗 @exodus/headless 举个例子.
  2. 控制/控制特性标记 :
  • 在模块/原子/插件/地物中,使用 featureFlagAtoms 依赖性.
  • 在UI中:
    • 使用 selectors.featureFlags.create(featureFlagName) 要读取当前旗帜值的选择器.
    • 使用 exodus.featureFlags.enable(featureFlagName) 财务报告和审定财务报表 exodus.featureFlags.disable(featureFlagName) 如果您需要切换运行时的旗帜值.

参见下面的例子代码.

背景情况

import createExodus from '@exodus/headless'

const featureFlags = {
  // ... other feature flags,
  dogeMode: {
    localDefaults: {
      // `true` if feature is shipped (available at runtime), `false` otherwise
      available: true,
      // controls whether the feature is enabled by default
      // NOTE: if `available` is false, `enabled` can NOT be true, or you can expect an error
      enabled: true,
    },
    remoteConfig: {
      // path to flag in remote config schema
      path: 'features.dogeMode',
      supportedOverrides: {
        // can be enabled/disabled for all users via remote config
        enabled: true,
        // can be enabled/disabled for users in certain geolocations via remote config
        geolocation: true,
        // can be enabled/disabled for users on certain app versions via remote config
        shutdownSemver: true,
        // can be rolled out to a share of users via remote config, see "Gradual rollout"
        rollout: true,
      },
    },
  },
}

const exodusContainer = createExodus({
  port,
  adapters,
  config: {
    // ...,
    featureFlags,
  },
})

const checkDogeModePlugin = {
  id: 'checkDogeModePlugin',
  factory: ({ featureFlagAtoms }) => {
    const onStart = () => {
      featureFlagAtoms.dogeMode?.get().then(({ isOn }) => {
        console.log('>>> is dogeMode enabled?', isOn)
      })
    }

    return {
      onStart,
    }
  },
  dependencies: ['featureFlagAtoms'],
}

exodusContainer.register({
  definition: checkDogeModePlugin,
})

const exodus = exodusContainer.resolve()
// ... continue as usual

UI 边

import selectors from '~/ui/flux/selectors'

const dogeModeFeatureName = 'dogeMode'

const HomePage = () => {
  const dogeMode = useSelector(selectors.featureFlags.create(dogeModeFeatureName))
  useEffect(() => {
    if (Math.random() < 0.001) {
      exodus.featureFlags.enable(dogeModeFeatureName)
    }
  }, [dogeMode])

  return dogeMode?.isOn ? <DogeMode /> : <NormalMode />
}

逐步推出

与 supportedOverrides.rollout设置 rollout 在远程配置中到整数 0 改为 100数字 :

{ "features": { "dogeMode": { "enabled": true, "rollout": 10 } } }

每个用户都从 0 改为 99数字 : sha256(featureName + ":" + telemetryId),前4个字节,模式100。 水桶还小的时候就挂了 rollout因此:

  • 用户在增加时会在同一组中停留 rollout,并在所有种子相同的设备上.
  • 每面旗帜都有独立的群.
  • 重新命名的旗帜给新的群体.
  • 无效 rollout 值会关闭旗帜.
  • 旗帜在钱包解锁之前保持本地默认值, 因为 telemetryId 来自于种子.

推出需要 analyticsUserIdAtom 依赖(来自 @exodus/analytics) (中文(简体) ).

不使用示例 @exodus/headless

见 实例 文件夹

构成部分

远程图形FeatureFlagAtoms

一个原子收藏 { [featureName]: atom },每个原子都为该特性旗发出当前远程配置值:

{
  isOn: Boolean,
  unavailableStatus: ?String
}

特性标记原子

一个原子收藏 { [featureName]: atom },每个原子释放其特征旗帜的当前状态:

{
  isOn: Boolean,
  unavailableStatus: ?String
}

特性标记原子

以对象映射所有特征标记的当前状态的原子 :

{
  [featureName]: {
    isOn: Boolean,
    unavailableStatus: ?String
  }
}

特性标记

模块,基于 remoteConfig 财务报告和审定财务报表 geolocation它将值写入原子 featureFlagAtoms,但可能更容易观测到集合特征标记原子 featureFlagsAtom。 。 。 .

版本与发布记录

@exodus/feature-flags 共发布 30 个版本,首次发布于 2023/01/21;过去 12 个月发布了 8 个版本。

版本发布日期距今
6.5.0latest2026/10/101 个月前
6.4.12026/07/084 个月前
6.4.02026/07/074 个月前
6.3.22026/05/285 个月前
6.3.12026/05/265 个月前
6.3.02026/05/096 个月前

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

@exodus/feature-flags 是什么?

基于远程Config、设备地理定位等的当前可用特性的监测/控制模块

如何安装 @exodus/feature-flags?

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

@exodus/feature-flags 支持 TypeScript 吗?

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

@exodus/feature-flags 支持 ESM 还是 CommonJS?

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

@exodus/feature-flags 可以商用吗?

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

@exodus/feature-flags 的下载量有多少?

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

@exodus/feature-flags 还在维护吗?

最新版本 6.5.0 发布于 2026/10/10(1 个月前);至今共发布 30 个版本,其中过去 12 个月发布了 8 个;首次发布于 2023/01/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。