特性控制
简化特性可用性处理
安装
$ 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>
指定要使用的模块。 可用模块按优先顺序排序,其中特性决定其可用性:
enabledOverriderolloutgeolocationshutdownSemver
创建 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